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
build_overrides Roll chromium_revision af3d01376b..f2539aa88a (1174635:1398488) 2025-01-08 06:40:17 -08:00
docs Fix typo, remove mips as title already contain mips 2025-04-15 14:02:28 -07:00
include Add Neon I8MM implementations of ARGB to UV and variants 2025-05-12 11:14:00 -07:00
infra/config Revert "Remove linux_tsan2 bot from CQ." 2025-01-09 00:26:58 -08:00
riscv_script Support RVV v0.12 intrinsics for row_rvv.cc & scale_rvv.cc 2024-06-17 18:01:49 +00:00
source Add Neon I8MM implementations of ARGB to UV and variants 2025-05-12 11:14:00 -07:00
tools_libyuv Remove libyuv dependency on base/ 2025-01-08 09:04:21 -08:00
unit_test Remove duplicate code in planar_functions.h 2025-04-04 15:48:23 -07:00
util Add SME2 detect 2025-03-27 11:08:08 -07:00
.clang-format clang-format libyuv 2016-11-07 17:37:23 -08:00
.gitignore DetilePlane and unittest for NEON 2022-01-31 20:05:55 +00:00
.gn Roll chromium_revision 908f3898af..3d4d5701ea (1403569:1445131) 2025-04-10 04:15:34 -07:00
.vpython3 Update protobuf version in .vpython3. 2025-01-09 00:32:24 -08:00
Android.bp Enable CFI assembly support 2025-03-31 10:47:47 -07:00
Android.mk Split scale_test and scale_plane_test to allow building on small devices 2023-12-09 18:39:41 +00:00
AUTHORS [DEPS] Remove cleanup_links pre_deps_hooks 2024-04-08 15:47:48 +00:00
BUILD.gn Roll chromium_revision af3d01376b..f2539aa88a (1174635:1398488) 2025-01-08 06:40:17 -08:00
CM_linux_packages.cmake Use grep extended regex for version 2024-11-13 02:11:17 +00:00
CMakeLists.txt Call cmake_minimum_required(VERSION 3.16) first 2025-04-13 10:08:52 -07:00
codereview.settings [infra] remove no longer supported git cl upload setting. 2021-04-28 12:47:52 +00:00
DEPS Remove --no_auth from download_from_google_storage hooks 2025-05-02 14:27:21 -07:00
DIR_METADATA Move metadata in OWNERS files to DIR_METADATA files 2021-02-09 19:34:43 +00:00
download_vs_toolchain.py Update pylintrc to a pep-8 like style 2024-12-18 05:38:56 -08:00
libyuv.gni Revert "Do not enable libyuv_use_sme for is_android" 2024-10-15 18:20:36 +00:00
libyuv.gyp Add libyuv.gyp build files 2022-03-21 23:48:16 +00:00
libyuv.gypi Add missing files for loong64 GYP build 2025-04-15 14:03:27 -07:00
LICENSE Update Copyright notice to follow new chromium conventions. 2012-08-08 19:04:24 +00:00
linux.mk Split convert_test and convert_argb_test to allow building on small systems that run out of memory compiling unittests. 2023-12-08 13:39:56 +00:00
OWNERS add jansson@google.com to infra owners to cover when Mirko is OOO 2022-10-28 09:46:02 +00:00
PATENTS LibYuv: Adding PATENT and LICENSE files 2011-10-25 16:15:49 +00:00
PRESUBMIT.py Update pylintrc to a pep-8 like style 2024-12-18 05:38:56 -08:00
public.mk use unix line endings 2018-06-20 23:19:59 +00:00
pylintrc Update pylintrc to a pep-8 like style 2024-12-18 05:38:56 -08:00
README.chromium ARGBToUV allow 32 bit x86 build 2025-04-28 12:11:00 -07:00
README.md Update README.md and environment_variables.md for Arm 2024-09-20 00:29:33 +00:00
winarm.mk NV12 Copy, include scale_uv.h 2020-12-08 18:54:16 +00:00

libyuv is an open source project that includes YUV scaling and conversion functionality.

  • Scale YUV to prepare content for compression, with point, bilinear or box filter.
  • Convert to YUV from webcam formats for compression.
  • Convert to RGB formats for rendering/effects.
  • Rotate by 90/180/270 degrees to adjust for mobile devices in portrait mode.
  • Optimized for SSSE3/AVX2 on x86/x64.
  • Optimized for Neon/SVE2/SME on Arm.
  • Optimized for MSA on Mips.
  • Optimized for RVV on RISC-V.

Development

See Getting started for instructions on how to get started developing.

You can also browse the docs directory for more documentation.