Robert Mader 9c10ea18c5 RFC: ConvertToI420: Add WithSrcStride variant
Some users - notably the libwebrtcs VideoCaptureImpl::IncomingFrame() -
are currently limited by the fact that the source stride is derived from
the format and buffer width, preventing it from supporting padded
buffers.
Padded buffers are useful if camera providers have hardware limitations
regarding the stride, sometimes requiring alignments to e.g. 64/128/256
bytes.

All the actual conversion implementations already support dedicated
source strides, thus let's add a variant of ConvertToI420() -
ConvertToI420WithSrcStride() - allowing users to pass through an
explicit stride.

Bug:538875176
Change-Id: I323729a315b26e96d7dbb93e68f04fbdd8120afe
2026-07-26 12:17:23 +02:00
build_overrides [tracing] Remove enable_base_tracing 2025-05-15 01:22:38 -07:00
docs Mirrow AVX2 functions for Visual C 2026-05-15 15:05:31 -07:00
include RFC: ConvertToI420: Add WithSrcStride variant 2026-07-26 12:17:23 +02: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 RFC: ConvertToI420: Add WithSrcStride variant 2026-07-26 12:17:23 +02:00
tools_libyuv Remove libyuv dependency on base/ 2025-01-08 09:04:21 -08:00
unit_test [libyuv] Use NV12 and NV21 Matrix wrapper macros in convert_argb_test 2026-07-21 19:42:22 -07:00
util vdpphps use emit to support old compilers 2026-07-06 15:51:14 -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 [DEPS] Remove cleanup_links pre_deps_hooks 2024-04-08 15:47:48 +00:00
BUILD.bazel Add Bazel build support 2026-04-15 18:20:26 -07:00
BUILD.gn [libyuv] Fix toolchain dependency for Windows x64 2026-07-14 08:37:10 -07:00
CM_linux_packages.cmake Use grep extended regex for version 2024-11-13 02:11:17 +00:00
CMakeLists.txt Deprecate MIPS and MSA support. 2025-10-16 12:20:40 -07:00
codereview.settings [infra] remove no longer supported git cl upload setting. 2021-04-28 12:47:52 +00:00
DEPS Roll chromium_revision 30d4d9c779..2fec1883d8 (1554090:1584384) 2026-02-12 23:42:06 -08: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 I420ToRAW and I420ToRGB24 1 pass AVX2 and AVX512VBMI 2026-07-20 18:15:10 -07:00
libyuv.bzl Add Bazel build support 2026-04-15 18:20:26 -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 row_win.cc rewrite into intrinsics 2026-04-15 19:53:16 -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 [libyuv] Fix 32-bit x86 register constraint in I422ToRGB24Row_AVX2 2026-07-20 23:35:02 -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.