Sida Zhu bcb6b76283 convert_from_argb: Add ARGB to NV16 and NV24
Add matrix and BT.601 wrapper APIs for converting ARGB to NV16 and
NV24. Reuse the optimized ARGB Y and UV row functions, then merge
the planar chroma rows into the interleaved destination plane.

NV16 performs horizontal 2:1 chroma subsampling on every source row.
NV24 preserves full-resolution 4:4:4 chroma. Both paths support odd
widths, negative heights, and the existing matrix constants.

Add tests that compare scalar and optimized paths at an odd width and
height through the matrix API and its BT.601 wrapper.

Bug: 537818862
Change-Id: Iddefc714a800cdec4dd1394ac7a52bf7b51fd350
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/8314188
Reviewed-by: Frank Barchard <fbarchard@google.com>
Reviewed-by: richard winterton <rrwinterton@gmail.com>
2026-09-01 12:56:28 -07:00
build_overrides [tracing] Remove enable_base_tracing 2025-05-15 01:22:38 -07:00
docs [libyuv] Keep LIBYUV_API in basic_types.h and remove legacy types and bool macros 2026-08-28 08:32:19 -07:00
include convert_from_argb: Add ARGB to NV16 and NV24 2026-09-01 12:56:28 -07:00
infra/config Use default xcode version in libyuv 2025-11-24 07:54:14 -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 convert_from_argb: Add ARGB to NV16 and NV24 2026-09-01 12:56:28 -07:00
tools_libyuv Remove libyuv dependency on base/ 2025-01-08 09:04:21 -08:00
unit_test convert_from_argb: Add ARGB to NV16 and NV24 2026-09-01 12:56:28 -07:00
util [libyuv] Keep LIBYUV_API in basic_types.h and remove legacy types and bool macros 2026-08-28 08:32:19 -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 Set use_siso=true by default in .gn 2025-06-23 23:50:32 -07:00
.vpython3 [libyuv] Bump vpython from 3.8 to 3.11 2025-09-03 12:22:19 -07:00
Android.bp Deprecate MIPS and MSA support. 2025-10-16 12:20:40 -07:00
Android.mk Android.mk: add a check for NDK_ROOT 2026-06-03 17:00:30 -07:00
AUTHORS Fix same-width vertical point upsampling 2026-08-24 19:28:50 -07:00
BUILD.bazel Do not use glob in the hdrs list of libyuv library 2026-08-28 15:17:28 -07:00
BUILD.gn Remove LIBYUV_UNBIASED_DATA and make unbiased AR30 rounding default 2026-08-27 17:42:40 -07:00
CM_linux_packages.cmake Use grep extended regex for version 2024-11-13 02:11:17 +00:00
CMakeLists.txt loongarch: Fix per-ISA build flags 2026-08-31 20:57:42 -07:00
codereview.settings [infra] remove no longer supported git cl upload setting. 2021-04-28 12:47:52 +00:00
DEPS [DEPS] Add CPython CIPD package for hermetic Python toolchain 2026-08-19 20:31:30 -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
GEMINI.md GEMINI.md: Update Arm wording and guidance 2026-08-18 11:21:14 -07:00
libyuv.bzl Do not use glob in the hdrs list of libyuv library 2026-08-28 15:17:28 -07:00
libyuv.gni row_win.cc rewrite into intrinsics 2026-04-15 19:53:16 -07:00
libyuv.gyp Stop setting --dynamic-linker for target_os="android" 2026-05-27 04:34:07 -07:00
libyuv.gypi Add missing files for riscv64 GYP build 2026-06-03 20:11:31 -07:00
LICENSE Update Copyright notice to follow new chromium conventions. 2012-08-08 19:04:24 +00:00
linux.mk Deprecate MIPS and MSA support. 2025-10-16 12:20:40 -07:00
OWNERS Remove magjed from OWNERS 2026-08-24 10:43:21 -07: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 Convert8To16 use shift to allow scale=65536 2026-09-01 12:21:37 -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
WORKSPACE.bazel Add Bazel build support 2026-04-15 18:20:26 -07: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.