2842 Commits

Author SHA1 Message Date
WANG Xuerui
6ecfe106c3 Enable explicit control over LoongArch LSX & LASX for GYP builds
And enable LASX by default for LoongArch builds, because LASX is
widely supported among LoongArch desktops and servers, and performance
is better than with LSX alone.

Because the LoongArch SIMD code is written to only compile if the
respective codegen option is enabled, but the defaults and availability
differ between compiler versions and target `-march` setting, the
codegen flags are explicitly added to CFLAGS for wider compatibility.

Bug: None
Change-Id: I735ceac0f6b46eea2155e58ecf3630383ef5b728
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6241804
Reviewed-by: Frank Barchard <fbarchard@chromium.org>
Reviewed-by: Mirko Bonadei <mbonadei@chromium.org>
2025-05-30 10:17:27 -07:00
George Steed
ef9833fc70 Add Neon implementation of Convert8To16Row
Add a Neon implementation of the Convert8To16Row kernel. Compared to the
C implementation we can take advantage of knowing that the "scale"
parameter is always an unsigned power of two and fits in 16-bits,
allowing us to combine this with the shift and avoid needing to widen
the input data.

Reduction in run times observed compared to the existing C
implementation:

 Cortex-A55: -44.5%
Cortex-A510: -26.1%
Cortex-A520: -30.6%
 Cortex-A76: -61.6%
Cortex-A710: -57.6%
  Cortex-X1: -46.5%
  Cortex-X2: -54.4%
  Cortex-X3: -57.1%
  Cortex-X4: -55.0%
Cortex-X925: -49.3%

Change-Id: I34b858605ece47e46588c0680a1d2afa7a90d7a0
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6516186
Reviewed-by: Justin Green <greenjustin@google.com>
Reviewed-by: Frank Barchard <fbarchard@chromium.org>
2025-05-29 13:37:48 -07:00
George Steed
7e5863ae5a Add SVE2 and SME implementations of I422ToAR30Row
This can make use of the existing load/convert/store macros that are
already present for other kernels, so add I422ToAR30Row_SVE2 and
I422ToAR30Row_SME to match the existing kernels.

Reduction in time taken observed for the new SVE2 implementation,
compared to the existing Neon implementation:

Cortex-A510: -9.1%
Cortex-A520: +6.8% (!)
Cortex-A710: -4.0%
Cortex-A715: -1.1%
Cortex-A720: -1.1%
  Cortex-X2: -5.7%
  Cortex-X3: -5.9%
  Cortex-X4: -2.8%
Cortex-X925: -4.0%

Change-Id: Ibf8bfaaeaba51f426649ded621cb0c8948dd9ee1
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6592332
Reviewed-by: Frank Barchard <fbarchard@chromium.org>
2025-05-27 11:39:00 -07:00
Junji Watanabe
3489272e28 Support Siso builds
This CL adds Siso support to libyuv:
- Install Siso CIPD package.
- Add a DEPS hook to generate .sisoenv file.
- Generate gn_logs.txt to propagate GN variables to Siso.

No-Try: True
Bug: chromium:412968361
Change-Id: I32fa1f34b4db257e34ca7445577ceb619c50c097
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6589371
Reviewed-by: Christoffer Dewerin <jansson@chromium.org>
Reviewed-by: Mirko Bonadei <mbonadei@chromium.org>
Commit-Queue: Mirko Bonadei <mbonadei@chromium.org>
2025-05-27 01:54:30 -07:00
Mirko Bonadei
42404a6efc Roll chromium_revision 3d4d5701ea..9dbf00e283 (1445131:1465343)
Change log: 3d4d5701ea..9dbf00e283
Full diff: 3d4d5701ea..9dbf00e283

Changed dependencies
* fuchsia_vesion: version:27.20250409.6.1..version:28.20250522.3.1
* gn_vesion: git_revision:6d326e97fe0242bf56c3de1a93f887446e80ec63..git_revision:ebc8f16ca7b0d36a3e532ee90896f9eb48e5423b
* reclient_vesion: re_client_version:0.177.1.e58c0145-gomaip..re_client_version:0.178.0.5ee9d3e8-gomaip
* src/build: a86a8f1eef..7907108fc6
* src/buildtools: 085537daf1..813bee86ee
* src/buildtools/linux64: git_revision:6d326e97fe0242bf56c3de1a93f887446e80ec63..git_revision:ebc8f16ca7b0d36a3e532ee90896f9eb48e5423b
* src/buildtools/mac: git_revision:6d326e97fe0242bf56c3de1a93f887446e80ec63..git_revision:ebc8f16ca7b0d36a3e532ee90896f9eb48e5423b
* src/buildtools/reclient: re_client_version:0.177.1.e58c0145-gomaip..re_client_version:0.178.0.5ee9d3e8-gomaip
* src/buildtools/win: git_revision:6d326e97fe0242bf56c3de1a93f887446e80ec63..git_revision:ebc8f16ca7b0d36a3e532ee90896f9eb48e5423b
* src/ios: cb94f0a680..c61efe1d6d
* src/testing: 83917cb85c..739fbc1a64
* src/third_party: 0aa3190ee4..a0168b392b
* src/third_party/android_toolchain/ndk: Idl-vYnWGnM8K3XJhM3h6zjYVDXlnljVz3FE00V9IM8C..KXOia11cm9lVdUdPlbGLu8sCz6Y4ey_HV2s8_8qeqhgC
* src/third_party/androidx/cipd: jYbS8zrbmfTcWph9ZY_BcX8HUPFnwt3fGMfhQcNURSQC..IKju-kxPcx53mOt9VCPN7dmPmZeWguJU1JS6WmN67kQC
* src/third_party/catapult: https://chromium.googlesource.com/catapult.git/+log/4f90fb2788..938fc9953b
* src/third_party/depot_tools: f40ddcd8d5..e0ece52cfb
* src/third_party/googletest/src: 52204f78f9..09ffd00153
* src/third_party/icu: c9fb4b3a6f..b929596bae
* src/third_party/kotlin_stdlib/cipd: dpAaSR0n15OMLmQJlIc-ZQ14UqzGBr2LaBEw_rukkl8C..GUpKElqF0PYGB-SP4D5w6p_MuMYQSBrRkGqFGjPhsIYC
* src/third_party/kotlinc/current: Wood5j4J3uPDtbP0fk868sOS0Y0umzF5X7w6U6QWupgC..XmaM7JA4hB75AuMdzCegF-XYzXtoHKOA1anrWqAJL3QC
* src/third_party/libc++/src: 024b5251a7..a01c02c9d4
* src/third_party/libc++abi/src: 78140a7276..9810fb23f6
* src/third_party/libunwind/src: e2e6f2a67e..8575f4ae4f
* src/third_party/llvm-libc/src: 54db6cfdef..9c3ae3120f
* src/third_party/nasm: 767a169c88..9f916e90e6
* src/third_party/r8/cipd: S1YW2OlP8ThsNUXDptm52Ouvnwp9t9xpTy5LECvEOw4C..QhYGRVpYYKZmt3f_Zb2HoJ9LIBEnWaeeLXRNei47Z30C
* src/third_party/r8/d8/cipd: wvbyt_Mr06Bl4Rcv4zoX-sTk_keiEYxfspOMUufh5nIC..QhYGRVpYYKZmt3f_Zb2HoJ9LIBEnWaeeLXRNei47Z30C
* src/third_party/turbine/cipd: scfGptWnO9bwzbg-jr0mcnVO3NG5KQJvlAQd_JSD5QUC..VGtOG2ivl1SJR7Lai5FQddIu15mWCYDnp47QtozMQeoC
* src/tools: f06b4755aa..ae54c8a35f
Added dependency
* src/third_party/android_deps/autorolled/cipd
DEPS diff: 3d4d5701ea..9dbf00e283/DEPS

Clang version changed llvmorg-21-init-6681-g5b36835d:llvmorg-21-init-11777-gfd3fecfc
Details: 3d4d5701ea..9dbf00e283/tools/clang/scripts/update.py

BUG=None
No-Try: True
Change-Id: I66a5c541493d688571a3ec324a67498334ac307e
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6586277
Commit-Queue: Mirko Bonadei <mbonadei@chromium.org>
Reviewed-by: Jeremy Leconte <jleconte@google.com>
2025-05-26 06:56:54 -07:00
George Steed
949cb623bf Add SVE2 and SME implementations of I444ToRGB24Row
Move the READYUV444_SVE_2X and I444TORGB_SVE_2X macros to row_sve.h so
they are usable in both SVE2 and SME implementations, and use them to
add new I444ToRGB24Row implementations for SVE2 and SME. We need to use
the unrolled versions here to use the ST3B interleaving store
instructions, since there is no partial vector version of this store
instruction.

Reduction in time taken observed for the new SVE2 implementation,
compared to the existing Neon implementation:

Cortex-A510: -57.6%
Cortex-A520: -38.1%
Cortex-A710: -15.5%
Cortex-A715:  -9.2%
Cortex-A720:  -9.2%
  Cortex-X2: -25.8%
  Cortex-X3: -26.2%
  Cortex-X4: -23.2%
Cortex-X925: -17.8%

Change-Id: I6acd0b798a35e5352d4fad664769f12d3d938ed7
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6530646
Reviewed-by: Justin Green <greenjustin@google.com>
Reviewed-by: Frank Barchard <fbarchard@chromium.org>
2025-05-22 13:33:06 -07:00
Frank Barchard
951e43439c Use pragma comment to disable warning for ASSERT_NE when including gtest.h
- // IWYU pragma: export

Bug: None
Change-Id: Ic438b9712ca9bccb819358cb94fbee9a63389748
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6553193
Commit-Queue: Frank Barchard <fbarchard@chromium.org>
Reviewed-by: Wan-Teh Chang <wtc@google.com>
2025-05-15 15:58:15 -07:00
Etienne Pierre-doray
84890943b3 [tracing] Remove enable_base_tracing
libyuv doesn't depend on chromium/base/ anymore.

Change-Id: Idb89d1e8cc6ebe1cd14f012299cdc9680c2da5cc
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6545812
Reviewed-by: Mirko Bonadei <mbonadei@chromium.org>
Commit-Queue: Mirko Bonadei <mbonadei@chromium.org>
Reviewed-by: Frank Barchard <fbarchard@chromium.org>
2025-05-15 01:22:38 -07:00
Frank Barchard
0853c9353f ARGBToUV 64 bit use ymm8 for shuffler
Bug: 381138208
Change-Id: I5e69bc1610bd6269bf9a4113e729cf307dd36f60
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6536833
Reviewed-by: richard winterton <rrwinterton@gmail.com>
2025-05-12 15:09:40 -07:00
George Steed
61bdaee13a Add Neon I8MM implementations of ARGB to UV and variants
The maximum coefficient is 128, so store constants negated to take
advantage of -128 being representable in 8-bit integers. This allows us
to use the I8MM USDOT instructions.

Reduction in time taken observed compared to the existing Neon
implementation, as a geomean of all ARGBToUV variants:

Cortex-A510:  -7.1%
Cortex-A520:  -2.1%
Cortex-A710:  -8.4%
Cortex-A715:  -0.3%
Cortex-A720:  -0.3%
  Cortex-X2: -40.0%
  Cortex-X3: -43.3%
  Cortex-X4: -11.3%
Cortex-X925:  -2.5%

Change-Id: Id06dc17d101b66975b84b93e5abe91c0032921dd
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6535686
Reviewed-by: Frank Barchard <fbarchard@chromium.org>
Reviewed-by: Justin Green <greenjustin@google.com>
Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2025-05-12 11:14:00 -07:00
Gavin Mak
4db2af62da Remove --no_auth from download_from_google_storage hooks
The flag was deprecated by https://crrev.com/c/6414748 and
has no effect besides telling the user that it has no effect.

Bug: 414826937
Change-Id: Idd0ee2e7a3cab0f49c4f87da0f3901713f9ebf00
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6509300
Reviewed-by: Frank Barchard <fbarchard@chromium.org>
Reviewed-by: Wan-Teh Chang <wtc@google.com>
Commit-Queue: Wan-Teh Chang <wtc@google.com>
2025-05-02 14:27:21 -07:00
Frank Barchard
9f9b5cf660 ARGBToUV allow 32 bit x86 build
- make width loop count on stack
- set YMM constants in its own asm block
- make struct for shuffle and add constants
- disable clang format on row_neon.cc function

Bug: 413781394
Change-Id: I263f6862cb7589dc31ac65d118f7ebeb65dbb24a
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6495259
Reviewed-by: Wan-Teh Chang <wtc@google.com>
Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2025-04-28 12:11:00 -07:00
WANG Xuerui
1e40e34573 Add missing files for loong64 GYP build
There are a few added source files since the (re-)addition of GYP build
support, for better SIMD optimization support (AArch64 SME & SVE,
LoongArch LSX & LASX, RISC-V RVV). This CL covers the LoongArch part in
preparation of fixing GYP builds for this architecture.

The files' arch-specific contents are all gated behind preprocessor
macro checks, so it is safe to have everything included in the build
unconditionally.

Bug: None
Change-Id: I2da37c1db79c2d8316ae42079e79efed2a2030a9
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6241803
Reviewed-by: Wan-Teh Chang <wtc@google.com>
Reviewed-by: Frank Barchard <fbarchard@chromium.org>
2025-04-15 14:03:27 -07:00
Mark Zhuang
fb7b9a4df4 Fix typo, remove mips as title already contain mips
Change-Id: I884f2f3ba937ec71fa070373e5c32977d35e7e75
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6267779
Reviewed-by: Frank Barchard <fbarchard@chromium.org>
Reviewed-by: Mirko Bonadei <mbonadei@chromium.org>
2025-04-15 14:02:28 -07:00
Wan-Teh Chang
ce488afb7b Call cmake_minimum_required(VERSION 3.16) first
CMake version >= 3.16 comes from Google's Foundational C++ Support
matrix:
https://github.com/google/oss-policies-info/blob/main/foundational-cxx-support-matrix.md

Call cmake_minimum_required() first, followed by project().

These changes fix two warnings from cmake version 3.31.5 and 4.0.1.

Change-Id: I42d51f2764d95e23a45a709986011dc0aafb3cf8
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6451084
Reviewed-by: Frank Barchard <fbarchard@chromium.org>
Reviewed-by: James Zern <jzern@google.com>
Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2025-04-13 10:08:52 -07:00
Mirko Bonadei
bf0f29fdf9 Roll chromium_revision 908f3898af..3d4d5701ea (1403569:1445131)
Change log: 908f3898af..3d4d5701ea
Full diff: 908f3898af..3d4d5701ea

Changed dependencies
* fuchsia_vesion: version:26.20250103.4.1..version:27.20250409.6.1
* gn_vesion: git_revision:c97a86a72105f3328a540f5a5ab17d11989ab7dd..git_revision:6d326e97fe0242bf56c3de1a93f887446e80ec63
* reclient_vesion: re_client_version:0.172.0.3cf60ba5-gomaip..re_client_version:0.177.1.e58c0145-gomaip
* src/build: f3e95cc9a0..a86a8f1eef
* src/buildtools: dc74188326..085537daf1
* src/buildtools/linux64: git_revision:c97a86a72105f3328a540f5a5ab17d11989ab7dd..git_revision:6d326e97fe0242bf56c3de1a93f887446e80ec63
* src/buildtools/mac: git_revision:c97a86a72105f3328a540f5a5ab17d11989ab7dd..git_revision:6d326e97fe0242bf56c3de1a93f887446e80ec63
* src/buildtools/reclient: re_client_version:0.172.0.3cf60ba5-gomaip..re_client_version:0.177.1.e58c0145-gomaip
* src/buildtools/win: git_revision:c97a86a72105f3328a540f5a5ab17d11989ab7dd..git_revision:6d326e97fe0242bf56c3de1a93f887446e80ec63
* src/ios: 6e4e345fbb..cb94f0a680
* src/testing: 4341e4d7a2..83917cb85c
* src/third_party: f25a92da84..0aa3190ee4
* src/third_party/android_deps/cipd/libs/com_google_android_datatransport_transport_api: version:2@2.2.1.cr1..version:2@4.0.0.cr1
* src/third_party/android_deps/cipd/libs/com_google_android_gms_play_services_auth: version:2@21.1.1.cr1..version:2@21.3.0.cr1
* src/third_party/android_deps/cipd/libs/com_google_android_gms_play_services_auth_api_phone: version:2@18.0.2.cr1..version:2@18.1.0.cr1
* src/third_party/android_deps/cipd/libs/com_google_android_gms_play_services_auth_base: version:2@18.0.10.cr1..version:2@18.1.0.cr1
* src/third_party/android_deps/cipd/libs/com_google_android_gms_play_services_basement: version:2@18.4.0.cr1..version:2@18.5.0.cr1
* src/third_party/android_deps/cipd/libs/com_google_android_gms_play_services_cast: version:2@17.0.0.cr1..version:2@22.0.0.cr1
* src/third_party/android_deps/cipd/libs/com_google_android_gms_play_services_cast_framework: version:2@17.0.0.cr1..version:2@22.0.0.cr1
* src/third_party/android_deps/cipd/libs/com_google_android_gms_play_services_cloud_messaging: version:2@16.0.0.cr1..version:2@17.2.0.cr1
* src/third_party/android_deps/cipd/libs/com_google_android_gms_play_services_flags: version:2@17.0.0.cr1..version:2@18.1.0.cr1
* src/third_party/android_deps/cipd/libs/com_google_android_gms_play_services_identity_credentials: version:2@16.0.0-alpha02.cr1..version:2@16.0.0-alpha05.cr1
* src/third_party/android_deps/cipd/libs/com_google_android_gms_play_services_instantapps: version:2@18.0.1.cr1..version:2@18.1.0.cr1
* src/third_party/android_deps/cipd/libs/com_google_android_gms_play_services_location: version:2@21.0.1.cr1..version:2@21.3.0.cr1
* src/third_party/android_deps/cipd/libs/com_google_android_gms_play_services_stats: version:2@17.0.0.cr1..version:2@17.1.0.cr1
* src/third_party/android_deps/cipd/libs/com_google_android_play_core_common: version:2@2.0.2.cr1..version:2@2.0.3.cr1
* src/third_party/android_deps/cipd/libs/com_google_android_play_feature_delivery: version:2@2.0.1.cr1..version:2@2.1.0.cr1
* src/third_party/android_deps/cipd/libs/com_google_code_gson_gson: version:2@2.9.0.cr1..version:2@2.8.0.cr1
* src/third_party/android_deps/cipd/libs/com_google_firebase_firebase_annotations: version:2@16.0.0.cr1..version:2@16.2.0.cr1
* src/third_party/android_deps/cipd/libs/com_google_firebase_firebase_common: version:2@19.5.0.cr1..version:2@21.0.0.cr1
* src/third_party/android_deps/cipd/libs/com_google_firebase_firebase_components: version:2@16.1.0.cr1..version:2@18.0.0.cr1
* src/third_party/android_deps/cipd/libs/com_google_firebase_firebase_encoders: version:2@16.1.0.cr1..version:2@17.0.0.cr1
* src/third_party/android_deps/cipd/libs/com_google_firebase_firebase_encoders_json: version:2@17.1.0.cr1..version:2@18.0.0.cr1
* src/third_party/android_deps/cipd/libs/com_google_firebase_firebase_iid: version:2@21.0.1.cr1..version:2@21.1.0.cr1
* src/third_party/android_deps/cipd/libs/com_google_firebase_firebase_iid_interop: version:2@17.0.0.cr1..version:2@17.1.0.cr1
* src/third_party/android_deps/cipd/libs/com_google_firebase_firebase_installations: version:2@16.3.5.cr1..version:2@17.2.0.cr1
* src/third_party/android_deps/cipd/libs/com_google_firebase_firebase_installations_interop: version:2@16.0.1.cr1..version:2@17.1.1.cr1
* src/third_party/android_deps/cipd/libs/com_google_firebase_firebase_measurement_connector: version:2@18.0.0.cr1..version:2@20.0.1.cr1
* src/third_party/android_deps/cipd/libs/com_google_firebase_firebase_messaging: version:2@21.0.1.cr1..version:2@24.1.0.cr1
* src/third_party/android_deps/cipd/libs/com_squareup_wire_wire_runtime_jvm: version:2@5.0.0.cr1..version:2@5.2.1.cr1
* src/third_party/android_deps/cipd/libs/org_codehaus_mojo_animal_sniffer_annotations: version:2@1.21.cr1..version:2@1.17.cr1
* src/third_party/android_deps/cipd/libs/org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm: version:2@1.8.1.cr1..version:2@1.10.1.cr1
* src/third_party/androidx/cipd: gUjEawxv5mQO8yfbuC8W-rx4V3zYE-4LTWggXpZHI4sC..jYbS8zrbmfTcWph9ZY_BcX8HUPFnwt3fGMfhQcNURSQC
* src/third_party/catapult: https://chromium.googlesource.com/catapult.git/+log/8491e07230..4f90fb2788
* src/third_party/depot_tools: 423f1e1914..f40ddcd8d5
* src/third_party/googletest/src: 7d76a231b0..52204f78f9
* src/third_party/harfbuzz-ng/src: 1c249be96e..9f83bbbe64
* src/third_party/icu: bbccc2f6ef..c9fb4b3a6f
* src/third_party/instrumented_libs: 3cc43119a2..69015643b3
* src/third_party/kotlin_stdlib/cipd: uguVAY3NvbfV4KgHrjjwvtTioMwPwSijfAgBPpbaYk0C..dpAaSR0n15OMLmQJlIc-ZQ14UqzGBr2LaBEw_rukkl8C
* src/third_party/kotlinc/current: YrBSUjA4zjPf3DhU2SYlqamxAAQiM2WIeZftsDSjqTAC..Wood5j4J3uPDtbP0fk868sOS0Y0umzF5X7w6U6QWupgC
* src/third_party/libc++/src: 74dd760826..024b5251a7
* src/third_party/libc++abi/src: 7681005c62..78140a7276
* src/third_party/libjpeg_turbo: 927aabfcd2..e14cbfaa85
* src/third_party/libunwind/src: d1e95b102f..e2e6f2a67e
* src/third_party/libunwindstack: 215bddfd8e..0d758dd57f
* src/third_party/llvm-libc/src: 2019a9e40b..54db6cfdef
* src/third_party/lss: https://chromium.googlesource.com/linux-syscall-support.git/+log/ce877209e1..ed31caa60f
* src/third_party/nasm: f477acb104..767a169c88
* src/third_party/r8/cipd: TQJgBofMEzGILWhAM0LXeob_ZpAiDc8w8SBzU0d8o8YC..S1YW2OlP8ThsNUXDptm52Ouvnwp9t9xpTy5LECvEOw4C
* src/third_party/r8/d8/cipd: U3Jf_ewWOZyxa6vyO3wjNIgm8XIz1yFk-4k3-wqDL44C..wvbyt_Mr06Bl4Rcv4zoX-sTk_keiEYxfspOMUufh5nIC
* src/third_party/re2/src: 6dcd83d60f..c84a140c93
* src/third_party/turbine/cipd: dz8pRLjwNlToJ0tS14T-TDQJNikmFXEDByMo-OzBbl0C..scfGptWnO9bwzbg-jr0mcnVO3NG5KQJvlAQd_JSD5QUC
* src/tools: 09973d22d8..f06b4755aa
Added dependencies
* src/third_party/android_deps/autorolled/cipd
* src/third_party/android_deps/cipd/libs/com_google_firebase_firebase_encoders_proto
* src/third_party/android_deps/cipd/libs/com_google_ar_impress
* src/third_party/android_deps/cipd/libs/com_google_firebase_firebase_datatransport
* src/third_party/android_deps/cipd/libs/com_google_android_datatransport_transport_runtime
* src/third_party/android_deps/cipd/libs/org_jetbrains_kotlinx_kotlinx_coroutines_play_services
* src/third_party/android_deps/cipd/libs/com_google_android_datatransport_transport_backend_cct
* src/third_party/android_deps/cipd/libs/com_google_firebase_firebase_common_ktx
Removed dependencies
* src/third_party/android_deps/cipd/libs/com_google_android_annotations
* src/third_party/android_deps/cipd/libs/com_google_dagger_hilt_core
* src/third_party/android_deps/cipd/libs/com_squareup_javawriter
* src/third_party/android_deps/cipd/libs/io_grpc_grpc_api
* src/third_party/android_deps/cipd/libs/io_grpc_grpc_binder
* src/third_party/android_deps/cipd/libs/io_grpc_grpc_context
* src/third_party/android_deps/cipd/libs/io_grpc_grpc_core
* src/third_party/android_deps/cipd/libs/io_grpc_grpc_protobuf_lite
* src/third_party/android_deps/cipd/libs/io_grpc_grpc_stub
* src/third_party/android_deps/cipd/libs/io_perfmark_perfmark_api
* src/third_party/android_deps/cipd/libs/javax_annotation_jsr250_api
* src/third_party/android_deps/cipd/libs/org_hamcrest_hamcrest
DEPS diff: 908f3898af..3d4d5701ea/DEPS

Clang version changed llvmorg-20-init-16062-g091448e3:llvmorg-21-init-6681-g5b36835d
Details: 908f3898af..3d4d5701ea/tools/clang/scripts/update.py

BUG=None

Change-Id: I165d415f9dd1e0d318bdc7eb4ab9fb34d1e81050
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6441069
Reviewed-by: Jeremy Leconte <jleconte@google.com>
Commit-Queue: Mirko Bonadei <mbonadei@chromium.org>
2025-04-10 04:15:34 -07:00
Wan-Teh Chang
8c48036d15 Remove duplicate code in planar_functions.h
The declarations of ARGBAffineRow_C and ARGBAffineRow_SSE2 and the code
to support those declarations are duplicated in planar_functions.h. They
are already in row.h, so we can simply remove them.

Change-Id: I9b522fdd201ca530f1268bf4200cd2e18b806ba5
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6434733
Reviewed-by: Frank Barchard <fbarchard@chromium.org>
Commit-Queue: Wan-Teh Chang <wtc@google.com>
2025-04-04 15:48:23 -07:00
Wan-Teh Chang
6cc603a8cf convert_test.cc: Remove unused ENABLE_ROW_TESTS
The ENABLE_ROW_TESTS macro is not used in convert_test.cc.

Change-Id: Icc50ec465beca81e14a9683a717680e179a541dd
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6434620
Reviewed-by: Frank Barchard <fbarchard@chromium.org>
Commit-Queue: Wan-Teh Chang <wtc@google.com>
2025-04-04 15:43:59 -07:00
Wan-Teh Chang
b7a857659f Disable Arm SME and SVE assmbly code under MSan
The code that disables Arm and Intel assembly code under MSan is
duplicated in cpu_support.h and planar_functions.h. This CL does not
address the code duplication.

Bug: b:407277484, b:407278016, b:407278132
Change-Id: If70fd8d3382916041d75efabcc84010ea3f1e60e
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6430806
Commit-Queue: Frank Barchard <fbarchard@chromium.org>
Reviewed-by: Frank Barchard <fbarchard@chromium.org>
2025-04-03 11:27:31 -07:00
Wan-Teh Chang
a4f653b389 Fix CMakeLists.txt for compatibility with gcc 10
Based on the libavif pull request
https://github.com/AOMediaCodec/libavif/pull/2660
by Frankie Dintino <fdintino@gmail.com>.

Bug: 399856238
Change-Id: I9b21a0cf1fd26b71d86090f41841eefa4d6bb194
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6405834
Reviewed-by: George Steed <george.steed@arm.com>
Reviewed-by: Frank Barchard <fbarchard@chromium.org>
Commit-Queue: Wan-Teh Chang <wtc@google.com>
2025-04-02 16:46:28 -07:00
WANG Xuerui
55a708e226 Fix unified sources build for LoongArch LASX
Several consumers of libyuv do unified sources build where many source
files are #include'd together to make compilation units larger and allow
for more optimization chances. But for LoongArch there is a wrinkle:
LASX and LSX code paths are implemented in separate files, unlike the
other currently supported architectures, and some definitions are
duplicated e.g. struct RgbConstants.

Since the duplicated content is identical across the two files, short of
some bigger refactoring, we can simply place #ifdef guards around the
definitions to fix unified sources build for LoongArch.

Change-Id: I952e8e0210221ec8bcc113f75fa1b9ba515ec323
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6272801
Reviewed-by: Mirko Bonadei <mbonadei@chromium.org>
Reviewed-by: Frank Barchard <fbarchard@chromium.org>
Commit-Queue: Mirko Bonadei <mbonadei@chromium.org>
2025-04-01 09:48:19 -07:00
Frank Barchard
23d416d6f3 Detect SME without SVE dependency
Bug: None
Change-Id: Ibe29488e893a493699ea3fae1a1a54a4fff5969c
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6418571
Reviewed-by: Wan-Teh Chang <wtc@google.com>
2025-03-31 17:27:40 -07:00
Wan-Teh Chang
dc47c71b3e Bump cmake_minimum_required version to 3.5
We started to get the following error in libavif's GitHub CI workflows:

  CMake Error at CMakeLists.txt:8 (cmake_minimum_required):
    Compatibility with CMake < 3.5 has been removed from CMake.

Change-Id: If2490208cc3e7da22ff67557c5cdd4bd9f2499ad
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6416369
Commit-Queue: Wan-Teh Chang <wtc@google.com>
Reviewed-by: Frank Barchard <fbarchard@chromium.org>
2025-03-31 13:14:45 -07:00
Hang Nguyen
a43f62aa40 Enable CFI assembly support
Adds the sanitizer for the static library libyuv to enable CFI assembly
support

Bug: 400789169
Change-Id: I9be82d90d60535fdf59e4e729778a455e946e4cc
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6414818
Reviewed-by: James Zern <jzern@google.com>
Reviewed-by: Frank Barchard <fbarchard@chromium.org>
2025-03-31 10:47:47 -07:00
Frank Barchard
f145aa26da Add SME2 detect
Bug: None
Change-Id: I36e576de1cf468049faaf3923b6c21fc9ad14271
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6401373
Reviewed-by: George Steed <george.steed@arm.com>
2025-03-27 11:08:08 -07:00
George Steed
64ac2d8f0f Avoid odd width stores in I422ToRGB565Row_{SVE2,SME}
The existing code for creating RGB565 data in SVE2 and SME produces two
vectors of interleaved 16-bit elements due to the nature of how SVE
widening instructions operate. This means that the indices of the 16-bit
data created appear in the two result vectors as such:

    z18.b: [elem0 byte0, elem0 byte1, elem2 byte0, elem2 byte1, ...]
    z19.b: [elem1 byte0, elem1 byte1, elem3 byte0, elem3 byte1, ...]

This is problematic for the final (predicated) iteration of the
conversion since the p1 predicate input to the ST2H instruction controls
storing the four bytes corresponding to the first two elements, in the
first two bytes of z18 and z19. This means that in the case that the
width is an odd number there is no way of storing just elem0 in z18
individually.

This patch addresses this by permuting the z18/z19 data such that the
two bytes from each element are split evenly across the two vectors:

    z20.b: [elem0 byte0, elem1 byte0, elem2 byte0, elem3 byte0, ...]
    z21.b: [elem0 byte1, elem1 byte1, elem2 byte1, elem3 byte1, ...]

Since we would now always store the same lanes from both vectors we can
continue to use the same predicate without further changes.

The existing (non-tail) loop body utilizes an all-true predicate so we
can avoid the extra permutes in this case, avoiding any performance
degradation.

Change-Id: I7d2be27c84cd9eb02cebac54a14c3498911f21d3
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6395137
Reviewed-by: Frank Barchard <fbarchard@chromium.org>
Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2025-03-26 04:08:46 -07:00
Frank Barchard
5f284054cb RVV disable 64 bit elements and vcombine_v
Bug: 405451074
Change-Id: I8e4437be92934b3c367c94d867d7967c32747260
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6385788
Reviewed-by: Wan-Teh Chang <wtc@google.com>
2025-03-25 12:51:25 -07:00
Frank Barchard
0c07032182 clang format applies to git repo
Bug: None
Change-Id: Ida65a0033e8c783230cadf6912416ffd9bbf90e1
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6393515
Reviewed-by: Wan-Teh Chang <wtc@google.com>
2025-03-25 11:49:25 -07:00
Jordan
0fd4581a51 Updating license id for libyuv
Bug: b/358504615

Change-Id: I93fecd22c16df8949a8ebe85aabe539c0231985e
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6275535
Commit-Queue: Wan-Teh Chang <wtc@google.com>
Reviewed-by: Frank Barchard <fbarchard@chromium.org>
Reviewed-by: Wan-Teh Chang <wtc@google.com>
2025-03-18 16:37:39 -07:00
Hang Nguyen
4ed75166cf Enable cfi in sanitizers for library
This CL enables the CFI checks for libyuv to be used as a
shared library.

Bug: 400789169
Change-Id: I8c71df235ad6962d02740c976972d8f9dcea6c52
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6353950
Reviewed-by: Frank Barchard <fbarchard@chromium.org>
Reviewed-by: James Zern <jzern@google.com>
Commit-Queue: Hang Nguyen <hnt@chromium.org>
2025-03-14 11:34:37 -07:00
Frank Barchard
918329caee Make constant 0x0101 using vpcmpeqb+vpabsb
Was
      vpcmpeqb    %%ymm4,%%ymm4,%%ymm4
      vpsrlw      $0xf,%%ymm4,%%ymm4
      vpackuswb   %%ymm4,%%ymm4,%%ymm4
Now
      vpcmpeqb    %%ymm4,%%ymm4,%%ymm4
      vpabsb      %%ymm4,%%ymm4

Bug: 381138208
Change-Id: Ib70c24ac636fff95a10c7f06ed8f0a3bc7514906
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6312925
Commit-Queue: Frank Barchard <fbarchard@chromium.org>
Reviewed-by: Justin Green <greenjustin@google.com>
2025-03-10 13:25:16 -07:00
Frank Barchard
c060118bea ARGBToJ444 use 256 for fixed point scale UV
- use negative coefficients for UV to allow -128
- change shift to truncate instead of round for UV
- adapt all row_gcc RGB to UV into matrix functions
- add -DLIBYUV_ENABLE_ROWWIN to allow clang on Windows to use row_win.cc

Bug: 381138208
Change-Id: I6016062c859faf147a8a2cdea6c09976cbf2963c
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6277710
Reviewed-by: Wan-Teh Chang <wtc@google.com>
Reviewed-by: James Zern <jzern@google.com>
Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2025-02-27 13:04:15 -08:00
Frank Barchard
5257ba4db0 Apply clang format
Bug: None
Change-Id: Ibd694d0351966a2b5812445de74bbced9c881a79
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6302317
Reviewed-by: James Zern <jzern@google.com>
Reviewed-by: Wan-Teh Chang <wtc@google.com>
Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2025-02-25 11:39:19 -08:00
Frank Barchard
3a7e0ba671 Apply format with no code changes
Bug: None
Change-Id: I8923bacb9af7e7d4f13e210c8b3d7ea6b81568a5
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6301086
Commit-Queue: Frank Barchard <fbarchard@chromium.org>
Reviewed-by: Mirko Bonadei <mbonadei@chromium.org>
2025-02-24 23:57:01 -08:00
Frank Barchard
61354d2671 ARGBToUV Matrix for AVX2 and SSSE3
- Round before shifting to 8 bit to match NEON
  - RAWToARGB use unaligned loads and port to AVX2

Was C/SSSE/AVX2
ARGBToI444_Opt (343 ms)
ARGBToJ444_Opt (677 ms)
RAWToI444_Opt (405 ms)
RAWToJ444_Opt (803 ms)

Now AVX2
ARGBToI444_Opt (283 ms)
ARGBToJ444_Opt (284 ms)
RAWToI444_Opt (316 ms)
RAWToJ444_Opt (339 ms)

Profile Now AVX2
  38.31%  ARGBToUVJ444Row_AVX2
  32.31%  RAWToARGBRow_AVX2
  23.99%  ARGBToYJRow_AVX2

Profile Was C/SSSE/AVX2
    73.15%  ARGBToUVJ444Row_C
    15.74%  RAWToARGBRow_SSSE3
     8.87%  ARGBToYJRow_AVX2

Bug: 381138208
Change-Id: I696b2d83435bc985aa38df831e01ff1a658da56e
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6231592
Reviewed-by: Wan-Teh Chang <wtc@google.com>
Reviewed-by: Ben Weiss <bweiss@google.com>
Reviewed-by: richard winterton <rrwinterton@gmail.com>
Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2025-02-10 18:36:18 -08:00
Frank Barchard
d32d19ccf2 UV subsample on ARM use rounding average of 4 pixels
Performance on Samsung S22 Exynos (SVE2+I8MM+DOTPROD+Neon)
AArch64
ARGBToI400_Opt (168 ms)
ARGBToJ400_Opt (103 ms)
ABGRToJ400_Opt (81 ms)
RGBAToJ400_Opt (82 ms)
RGB24ToJ400_Opt (176 ms)
RAWToJ400_Opt (176 ms)
ABGRToI420_Opt (258 ms)
ARGBToI420_Opt (259 ms)
ARGBToI422_Opt (403 ms)
ARGBToI444_Opt (213 ms)
ARGBToJ420_Opt (257 ms)
ARGBToJ422_Opt (403 ms)
ARGBToJ444_Opt (214 ms)
ABGRToJ420_Opt (255 ms)
ABGRToJ422_Opt (399 ms)
ARGB4444ToI420_Opt (285 ms)
RGB565ToI420_Opt (316 ms)
ARGB1555ToI420_Opt (324 ms)
BGRAToI420_Opt (260 ms)
RAWToI420_Opt (303 ms)
RAWToI444_Opt (303 ms)
RAWToJ420_Opt (335 ms)
RAWToJ444_Opt (308 ms)
RGB24ToI420_Opt (372 ms)
RGB24ToJ420_Opt (365 ms)
RGBAToI420_Opt (259 ms)

AArch32 (Neon)
ARGBToI400_Opt (496 ms)
ARGBToJ400_Opt (478 ms)
ABGRToJ400_Opt (483 ms)
RGBAToJ400_Opt (493 ms)
RGB24ToJ400_Opt (343 ms)
RAWToJ400_Opt (341 ms)
ABGRToI420_Opt (993 ms)
ARGBToI420_Opt (992 ms)
ARGBToI422_Opt (1503 ms)
ARGBToI444_Opt (1257 ms)
ARGBToJ420_Opt (1006 ms)
ARGBToJ422_Opt (1521 ms)
ARGBToJ444_Opt (1267 ms)
ABGRToJ420_Opt (1002 ms)
ABGRToJ422_Opt (1504 ms)
ARGB4444ToI420_Opt (1180 ms)
RGB565ToI420_Opt (1112 ms)
ARGB1555ToI420_Opt (1115 ms)
BGRAToI420_Opt (993 ms)
RAWToI420_Opt (703 ms)
RAWToI444_Opt (1717 ms)
RAWToJ420_Opt (704 ms)
RAWToJ444_Opt (1739 ms)
RGB24ToI420_Opt (703 ms)
RGB24ToJ420_Opt (703 ms)
RGBAToI420_Opt (993 ms)

Bug: 381138208
Change-Id: I33728d5237f357362b0bfc509a9ebe6fe46f45d4
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6228987
Reviewed-by: Ben Weiss <bweiss@google.com>
Reviewed-by: Wan-Teh Chang <wtc@google.com>
2025-02-04 15:19:19 -08:00
George Steed
ccdf870348 [AArch64] Fix up inline asm name in Convert8To8Row_SVE_SC
The existing implementation mistakenly refers to the parameter %2. This
works fine however the parameter is already named %[width], and using
the name should be preferred.

Change-Id: Ifaf8fc83cdfc9b15c79d52e7e47cb72b53270a12
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6225753
Reviewed-by: Frank Barchard <fbarchard@chromium.org>
2025-02-04 10:28:17 -08:00
Frank Barchard
5a9a6ea936 Add RAWToI444
Skylake Xeon
  RAWToI444_Opt (433 ms)
  RAWToJ444_Opt (1781 ms)
  ARGBToI444_Opt (352 ms)
  ARGBToJ444_Opt (1577 ms)

Samsung S22 Exynos
  ARGBToI444_Opt (283 ms)
  ARGBToJ444_Opt (209 ms)
  RAWToI444_Opt (294 ms)
  RAWToJ444_Opt (293 ms)

Profiling on Samsung S22 Exynos
37.62%,  ARGBToUV444Row_NEON_I8MM
29.42%,  RAWToARGBRow_SVE2
19.61%,  ARGBToYRow_NEON_DotProd

Passing different --libyuv_cpu_info=N etc we can compare each ISA
C           1  RAWToI444_Opt (781 ms)
NEON      511  RAWToI444_Opt (757 ms)
NEONDOT  1023  RAWToI444_Opt (571 ms)
NEONI8MM 2047  RAWToI444_Opt (334 ms)
SVE2     8191  RAWToI444_Opt (307 ms)



Bug: 390247964
Change-Id: I0316fedd32222588455afa751f5b854f46bce024
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6223658
Reviewed-by: Wan-Teh Chang <wtc@google.com>
2025-02-03 16:13:03 -08:00
Frank Barchard
b3fd3f3f3b Fix ARGBToUV444Row_NEON
- constants passed in are signed and need to be negated to positive.

Bug: 394127527
Change-Id: I531e475d2ddd4583922d4abef13b9282d002dd7a
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6226854
Reviewed-by: Ben Weiss <bweiss@google.com>
2025-02-03 13:33:39 -08:00
Frank Barchard
96f98f6915 ARGBToJ444 and RAWToJ444 NEON
- Pass JPEG matrix to ARGBToUV444MatrixRow_NEON
- Remove NEON unsigned constants in favor of DOTPROD signed constants

Samsung S23:
Was C for UV
  ARGBToJ444_Opt (320 ms)
  RAWToJ444_Opt (411 ms)
Now I8MM
  ARGBToJ444_Opt (196 ms)
  RAWToJ444_Opt (301 ms)
NEON
  ARGBToJ444_Opt (505 ms)
  RAWToJ444_Opt (596 ms)

32 bit ARM NEON
  ARGBToJ444_Opt (1135 ms)
  RAWToJ444_Opt (1546 ms)

Profile of RAWToJ444
  37.72%  ARGBToUVJ444Row_NEON_I8MM
  34.48%  RAWToARGBRow_NEON
  14.65%  ARGBToYJRow_NEON_DotProd

Bug: 390247964
Change-Id: Ia26240bee974a0baf502548f2fc896b193c3006c
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6220890
Reviewed-by: Ben Weiss <bweiss@google.com>
2025-01-31 16:46:29 -08:00
Björn Terelius
1c938f342d Try removing some unused DEPS
Bug: None
Change-Id: I8a0b4ffefbc8ef82627c4f3a5ef5e3fb226e80bb
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6159066
Reviewed-by: Frank Barchard <fbarchard@chromium.org>
Commit-Queue: Mirko Bonadei <mbonadei@chromium.org>
Reviewed-by: Mirko Bonadei <mbonadei@chromium.org>
2025-01-31 01:10:17 -08:00
Frank Barchard
c1bac9e6a5 RAWToJ444 and ARGBToJ444
- ARGBToJ444 implements ARGBToUVJ444Row_C
- RAWToJ444 implemented as 2 steps - RAWToARGB and ARGBToJ444

libyuv_test '--gunit_filter=*R*To?444_Opt' --libyuv_width=1280 --libyuv_height=720 --libyuv_repeat=1000 --libyuv_flags=-1 --libyuv_cpu_info=-1
(with bit exact off)

Samsung S23
RAWToJ444_Opt (437 ms)
ARGBToJ444_Opt (337 ms)
ARGBToI444_Opt (196 ms)

Skylake Xeon
RAWToJ444_Opt (1699 ms)
ARGBToJ444_Opt (1559 ms)
ARGBToI444_Opt (346 ms)

Bug: 390247964
Change-Id: Id1b1b45a5e4512ab50830aadf62f780fbe631575
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6207845
Reviewed-by: Wan-Teh Chang <wtc@google.com>
2025-01-29 15:18:38 -08:00
George Steed
c4a0c8d34a [AArch64] Add SVE2 and SME implementations for Convert8To8Row
SVE can make use of the UMULH instruction to avoid needing separate
widening multiply and narrowing steps for the scale application.

Reduction in runtime for Convert8To8Row_SVE2 observed compared to the
existing Neon implementation:

        Cortex-A510: -13.2%
        Cortex-A520: -16.4%
        Cortex-A710: -37.1%
        Cortex-A715: -38.5%
        Cortex-A720: -38.4%
          Cortex-X2: -33.2%
          Cortex-X3: -31.8%
          Cortex-X4: -31.8%
        Cortex-X925: -13.9%

Change-Id: I17c0cb81661c5fbce786b47cdf481549cfdcbfc7
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6207692
Reviewed-by: Wan-Teh Chang <wtc@google.com>
Reviewed-by: Frank Barchard <fbarchard@chromium.org>
Commit-Queue: Frank Barchard <fbarchard@chromium.org>
2025-01-28 15:53:26 -08:00
Wan-Teh Chang
eacb08c83e Update "TEST" to "UNIT_TEST" in a comment
Change-Id: I53588bc027c1e75b2ee7f7fc155fd25d75e932bf
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6203445
Reviewed-by: Frank Barchard <fbarchard@chromium.org>
Commit-Queue: Wan-Teh Chang <wtc@google.com>
2025-01-27 16:21:09 -08:00
Frank Barchard
6c2415bfab J420ToI420 AVX2
libyuv_test '--gunit_filter=*J420ToI420*' --libyuv_width=1280 --libyuv_height=720 --libyuv_repeat=1000 --libyuv_flags=-1 --libyuv_cpu_info=-1

Skylake Xeon
AVX2 J420ToI420_Opt (114 ms)
C    J420ToI420_Opt (596 ms)

Sapphire Rapids
AVX2 J420ToI420_Opt (126 ms)
C    J420ToI420_Opt (717 ms)

Samsung S23
NEON J420ToI420_Opt (46 ms)
C    J420ToI420_Opt (95 ms)

Bug: 381327032
Change-Id: I2b551507c2a8b1da4f04651b622fc9247a75050d
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6201239
Reviewed-by: Justin Green <greenjustin@google.com>
2025-01-27 11:23:44 -08:00
Frank Barchard
67f3f17d9a aarch32 J420ToI420
benchmark on medium core
adbrun -- taskset 10 blaze-bin/third_party/libyuv/libyuv_test '--gunit_filter=*J420ToI420*' --gunit_also_run_disabled_tests --libyuv_width=1280 --libyuv_height=720 --libyuv_repeat=1000 --libyuv_flags=-1 --libyuv_cpu_info=-1

Now Neon
J420ToI420_Opt (159 ms)
Was C
J420ToI420_Opt (215 ms)

AArch64
J420ToI420_Opt (93 ms)

C version does this:
vld1.8	{d20, d21}, [r6]!
vorr	q12, q8, q8
subs	r4, #16
vmovl.u8	q11, d21
vmovl.u8	q10, d20
vmul.i16	q11, q9, q11
vmul.i16	q10, q9, q10
vsra.u16	q12, q11, #8
vorr	q11, q8, q8
vsra.u16	q11, q10, #8
vmovn.i16	d21, q12
vmovn.i16	d20, q11
vst1.8	{d20, d21}, [r5]!
bne	0x3d9078 <Convert8To8Row_C+0x36> @ imm = #-54

Explanation of above C code
vorr moves 16 into register
vsra does shift + accumulate to that register

Compared to aarch64
instead of mull, C uses movl+mul
instead of uzp2, C uses sra #8 + movn. takes 2 movn vs 1 uzp2
instead of add, C does vorr + sra

Change-Id: I9648f06e52ccbafaecf07bd89f8ffff27565d025
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6189497
Reviewed-by: Justin Green <greenjustin@google.com>
2025-01-22 13:47:09 -08:00
Frank Barchard
26277baf96 J420ToI420 using planar 8 bit scaling
- Add Convert8To8Plane which scale and add 8 bit values allowing full range
  YUV to be converted to limited range YUV

libyuv_test '--gunit_filter=*J420ToI420*' --gunit_also_run_disabled_tests --libyuv_width=1280 --libyuv_height=720 --libyuv_repeat=1000 --libyuv_flags=-1 --libyuv_cpu_info=-1

Samsung S23
J420ToI420_Opt (45 ms)
I420ToI420_Opt (37 ms)

Skylake
J420ToI420_Opt (596 ms)
I420ToI420_Opt (99 ms)

Bug: 381327032
Change-Id: I380c3fa783491f2e3727af28b0ea9ce16d2bb8a4
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6182631
Reviewed-by: Wan-Teh Chang <wtc@google.com>
2025-01-22 02:50:24 -08:00
Frank Barchard
ef52c1658a avx10_2 detect
Run with sde only -dmr reports AVX10.2
emr:Has AVX10_2 0x0
adl:Has AVX10_2 0x0
icx:Has AVX10_2 0x0
snb:Has AVX10_2 0x0
tnt:Has AVX10_2 0x0
icl:Has AVX10_2 0x0
slm:Has AVX10_2 0x0
dmr:Has AVX10_2 0x2000000
cwf:Has AVX10_2 0x0
mrm:Has AVX10_2 0x0
skx:Has AVX10_2 0x0
wsm:Has AVX10_2 0x0
gnr:Has AVX10_2 0x0
gnr256:Has AVX10_2 0x0
bdw:Has AVX10_2 0x0
cpx:Has AVX10_2 0x0
rpl:Has AVX10_2 0x0
snr:Has AVX10_2 0x0
ptl:Has AVX10_2 0x0
slt:Has AVX10_2 0x0
ivb:Has AVX10_2 0x0
spr:Has AVX10_2 0x0
tgl:Has AVX10_2 0x0
arl:Has AVX10_2 0x0
srf:Has AVX10_2 0x0
nhm:Has AVX10_2 0x0
skl:Has AVX10_2 0x0
mtl:Has AVX10_2 0x0
pnr:Has AVX10_2 0x0
glp:Has AVX10_2 0x0
lnl:Has AVX10_2 0x0
cnl:Has AVX10_2 0x0
hsw:Has AVX10_2 0x0
clx:Has AVX10_2 0x0
glm:Has AVX10_2 0x0

sde -dmr -- libyuv_test --gunit_filter=*Cpu*
[ RUN      ] LibYUVBaseTest.TestCpuId
Cpu Vendor: GenuineIntel 0x756e6547 0x49656e69 0x6c65746e
Cpu Family 6 (0x6), Model 214 (0xd6)
[       OK ] LibYUVBaseTest.TestCpuId (34 ms)
[ RUN      ] LibYUVBaseTest.TestCpuHas
Kernel Version 6.10
Has X86 0x8
Has SSE2 0x100
Has SSSE3 0x200
Has SSE4.1 0x400
Has SSE4.2 0x800
Has AVX 0x1000
Has AVX2 0x2000
Has ERMS 0x4000
Has FSMR 0x8000
Has FMA3 0x10000
Has F16C 0x20000
Has AVX512BW 0x40000
Has AVX512VL 0x80000
Has AVX512VNNI 0x100000
Has AVX512VBMI 0x200000
Has AVX512VBMI2 0x400000
Has AVX512VBITALG 0x800000
Has AVX10 0x1000000
Has AVX10_2 0x2000000
HAS AVXVNNI 0x4000000
Has AVXVNNIINT8 0x8000000
Has AMXINT8 0x10000000
[       OK ] LibYUVBaseTest.TestCpuHas (10 ms)

This is how oneDNN does avx10 version:
e15d2c220f/src/cpu/x64/xbyak/xbyak_util.h (L698-L701)

Bug: b/350318244
Change-Id: I6f78402fecc38a92019d137b3439d7bce950510c
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6172267
Commit-Queue: Frank Barchard <fbarchard@chromium.org>
Reviewed-by: richard winterton <rrwinterton@gmail.com>
2025-01-21 13:53:19 -08:00
Frank Barchard
10592b60c0 Add required 'Security Critical' field to README.chromium
Marked as yes to match webrtc

Bug: b/365319755
Change-Id: I92ba17e3215b6290211519e2b671087ec1386270
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6170587
Reviewed-by: Mirko Bonadei <mbonadei@chromium.org>
Commit-Queue: Mirko Bonadei <mbonadei@chromium.org>
2025-01-12 03:45:13 -08:00
Jeremy Leconte
e2c92b560c Update protobuf version in .vpython3.
Bug: None
Change-Id: Ib02151731d93c460ad23ff93d7ff4370010bc7b3
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6162534
Commit-Queue: Mirko Bonadei <mbonadei@chromium.org>
Commit-Queue: Jeremy Leconte <jleconte@google.com>
Reviewed-by: Mirko Bonadei <mbonadei@chromium.org>
2025-01-09 00:32:24 -08:00