Update libyuv to new version 3f3735e3f39c68d33104add994bfe5d055b32e17 from 2026-09-16 00:00:00
Categories
(Core :: Graphics, enhancement)
Tracking
()
| Tracking | Status | |
|---|---|---|
| firefox158 | --- | fixed |
People
(Reporter: update-bot, Assigned: ng)
Details
(Whiteboard: [3pl-filed][task_id: DcFWjYu2R7SgFAC7JnOOZA])
Attachments
(2 files)
This update covers 21 commits. Here are the overall diff statistics, and then the commit information.
media/libyuv/libyuv/Android.bp | 1 +
media/libyuv/libyuv/Android.mk | 2 +
media/libyuv/libyuv/BUILD.bazel | 67 ++-
media/libyuv/libyuv/BUILD.gn | 12 +-
media/libyuv/libyuv/CMakeLists.txt | 85 ++-
media/libyuv/libyuv/README.chromium | 2 +-
media/libyuv/libyuv/docs/formats.md | 10 +-
media/libyuv/libyuv/docs/getting_started.md | 72 +-
media/libyuv/libyuv/include/libyuv/basic_types.h | 36 -
media/libyuv/libyuv/include/libyuv/compare.h | 3 +
media/libyuv/libyuv/include/libyuv/compare_row.h | 4 +-
media/libyuv/libyuv/include/libyuv/convert.h | 3 +
media/libyuv/libyuv/include/libyuv/convert_argb.h | 3 +
media/libyuv/libyuv/include/libyuv/convert_from.h | 2 +
media/libyuv/libyuv/include/libyuv/convert_from_argb.h | 56 +-
media/libyuv/libyuv/include/libyuv/cpu_id.h | 2 +
media/libyuv/libyuv/include/libyuv/mjpeg_decoder.h | 33 +-
media/libyuv/libyuv/include/libyuv/planar_functions.h | 21 +-
media/libyuv/libyuv/include/libyuv/rotate.h | 2 +
media/libyuv/libyuv/include/libyuv/rotate_argb.h | 2 +
media/libyuv/libyuv/include/libyuv/rotate_row.h | 4 +-
media/libyuv/libyuv/include/libyuv/row.h | 64 +-
media/libyuv/libyuv/include/libyuv/row_sve.h | 4 -
media/libyuv/libyuv/include/libyuv/scale.h | 6 +-
media/libyuv/libyuv/include/libyuv/scale_argb.h | 2 +
media/libyuv/libyuv/include/libyuv/scale_rgb.h | 2 +
media/libyuv/libyuv/include/libyuv/scale_row.h | 4 +-
media/libyuv/libyuv/include/libyuv/scale_uv.h | 2 +
media/libyuv/libyuv/include/libyuv/version.h | 2 +-
media/libyuv/libyuv/include/libyuv/video_common.h | 9 +-
media/libyuv/libyuv/libyuv.bzl | 9 +-
media/libyuv/libyuv/libyuv.gyp | 112 +---
media/libyuv/libyuv/libyuv.gypi | 32 +-
media/libyuv/libyuv/source/compare.cc | 1 -
media/libyuv/libyuv/source/compare_common.cc | 2 -
media/libyuv/libyuv/source/compare_gcc.cc | 2 -
media/libyuv/libyuv/source/compare_neon.cc | 2 -
media/libyuv/libyuv/source/compare_neon64.cc | 2 -
media/libyuv/libyuv/source/compare_win.cc | 2 -
media/libyuv/libyuv/source/convert.cc | 29 +-
media/libyuv/libyuv/source/convert_argb.cc | 5 +
media/libyuv/libyuv/source/convert_from.cc | 38 +-
media/libyuv/libyuv/source/convert_from_argb.cc | 508 ++++++++++++++++-
media/libyuv/libyuv/source/convert_jpeg.cc | 10 +-
media/libyuv/libyuv/source/convert_to_argb.cc | 234 +++++++-
media/libyuv/libyuv/source/convert_to_i420.cc | 176 +++++-
media/libyuv/libyuv/source/mjpeg_decoder.cc | 85 +-
media/libyuv/libyuv/source/mjpeg_validate.cc | 14 +-
media/libyuv/libyuv/source/planar_functions.cc | 65 +-
media/libyuv/libyuv/source/rotate_any.cc | 2 -
media/libyuv/libyuv/source/rotate_common.cc | 55 +-
media/libyuv/libyuv/source/rotate_neon.cc | 2 -
media/libyuv/libyuv/source/rotate_neon64.cc | 2 -
media/libyuv/libyuv/source/rotate_sme.cc | 2 -
media/libyuv/libyuv/source/row_any.cc | 30 +-
media/libyuv/libyuv/source/row_common.cc | 36 +-
media/libyuv/libyuv/source/row_gcc.cc | 107 ++-
media/libyuv/libyuv/source/row_lasx.cc | 10 +-
media/libyuv/libyuv/source/row_lsx.cc | 19 +-
media/libyuv/libyuv/source/row_neon.cc | 29 +
media/libyuv/libyuv/source/row_neon64.cc | 15 +-
media/libyuv/libyuv/source/row_rvv.cc | 111 +++
media/libyuv/libyuv/source/row_sme.cc | 8 +-
media/libyuv/libyuv/source/row_win.cc | 78 ++-
media/libyuv/libyuv/source/scale.cc | 2 +-
media/libyuv/libyuv/source/scale_any.cc | 2 -
media/libyuv/libyuv/source/scale_common.cc | 275 +++------
media/libyuv/libyuv/source/scale_rvv.cc | 502 ++++++++++------
media/libyuv/libyuv/unit_test/basictypes_test.cc | 3 +-
media/libyuv/libyuv/unit_test/color_test.cc | 1 -
media/libyuv/libyuv/unit_test/compare_test.cc | 1 -
media/libyuv/libyuv/unit_test/convert_argb_test.cc | 172 +++--
media/libyuv/libyuv/unit_test/convert_test.cc | 184 ++++-
media/libyuv/libyuv/unit_test/cpu_test.cc | 1 -
media/libyuv/libyuv/unit_test/math_test.cc | 1 -
media/libyuv/libyuv/unit_test/planar_test.cc | 327 +++++++---
media/libyuv/libyuv/unit_test/unit_test.cc | 10 +-
media/libyuv/libyuv/unit_test/unit_test.h | 3 +-
media/libyuv/libyuv/unit_test/video_common_test.cc | 2 +
media/libyuv/libyuv/util/compare.cc | 1 -
media/libyuv/moz.yaml | 4 +-
81 files changed, 2762 insertions(+), 1080 deletions(-)
3f3735e3f39c68d33104add994bfe5d055b32e17 by Wan-Teh Chang <wtc@google.com>
https://chromium.googlesource.com/libyuv/libyuv//+/3f3735e3f39c68d33104add994bfe5d055b32e17
Authored: 2026-09-09 09:50:43 -0700
Committed: 2026-09-09 10:56:48 -0700
Make loops iterate over arrays using size_t index
A follow-up to commit 24b6126:
https://chromium-review.googlesource.com/c/libyuv/libyuv/+/8373923
Use the new expressions (of the size_t type) for buffer sizes in for
loops for consistency with the buffer allocation and memset calls.
Change-Id: I753db9c2d0b92d3de3517faae1201dbdd325d129
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/8383016
Reviewed-by: richard winterton <rrwinterton@gmail.com>
Commit-Queue: Wan-Teh Chang <wtc@google.com>
Files Modified:
- unit_test/convert_argb_test.cc
- unit_test/planar_test.cc
fab11704cda62ff2d6b5e308b741e759ae816035 by Frank Barchard <fbarchard@google.com>
https://chromium.googlesource.com/libyuv/libyuv//+/fab11704cda62ff2d6b5e308b741e759ae816035
Authored: 2026-09-08 19:22:51 -0700
Committed: 2026-09-09 09:17:24 -0700
[libyuv] Use Armv8.5-A architecture flags for SME and SVE2 build targets
Update BUILD.gn, CMakeLists.txt, and BUILD.bazel to specify Armv8.5-A
baseline architecture flags rather than Armv9:
- BUILD.gn: update :libyuv_sve to -march=armv8.5-a+i8mm+sve2 and
:libyuv_sme to -march=armv8.5-a+i8mm+sme. - CMakeLists.txt: update SME check and compile options to
-march=armv8.5-a+i8mm+sme (SVE target already uses armv8.5-a). - BUILD.bazel: update ENABLE_SVE_COPTS to -march=armv8.5-a+i8mm+sve2.
Using -march=armv9-a enabled baseline SVE in the compiler, causing
Clang to emit non-streaming SVE instructions (such as cntd in function
prologues prior to smstart) in SME translation units. On processors
such as Apple M4/M5 that support SME but not SVE, executing these
prologue instructions resulted in SIGILL crashes.
Test: ninja -C out/arm64.release libyuv libyuv_unittest
Bug: 558654023
Change-Id: Ic7f62842bc9bd71608cc78ad11fd5e2214ef5e8e
TAG=agy
CONV=a70f0e53-caf2-4fbe-a024-1616ed25ba9a
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/8376021
Commit-Queue: Wan-Teh Chang <wtc@google.com>
Reviewed-by: Wan-Teh Chang <wtc@google.com>
Files Modified:
- BUILD.bazel
- BUILD.gn
- CMakeLists.txt
137e29972ebbb16e72a6fc6d2314823198c7884e by Frank Barchard <fbarchard@google.com>
https://chromium.googlesource.com/libyuv/libyuv//+/137e29972ebbb16e72a6fc6d2314823198c7884e
Authored: 2026-09-08 16:49:27 -0700
Committed: 2026-09-08 17:50:17 -0700
[libyuv] Simplify RVV configuration in BUILD.bazel and libyuv.bzl
Restructure RISC-V Vector (RVV) configuration to follow the pattern
used by NEON and SVE:
- Move RVV_COPTS immediately after SVE_COPTS.
- Define ENABLE_RVV_COPTS (-march=rv32gcv) and ENABLE_RVV64_COPTS
(-march=rv64gcv) with SUPPORTS_RVV_COPTS (-DLIBYUV_RVV). - Revert ALL_COPTS to PLATFORM_COPTS so RVV vector flags are not
applied to generic sources. - Add ALL_RVV_COPTS, RVV_DEPS, and libyuv_rvv_impl target.
- Update libyuv.bzl to add libyuv_rvv_srcs and exclude source/rvv.cc
from libyuv_srcs.
Test: cmake -B out/Release -DUNIT_TEST=ON && cmake --build out/Release
Bug: none
Change-Id: Ia60a8bc1da9db46f0c5295064d7b9d3d5609a38f
TAG=agy
CONV=06856819-10a7-4815-93d3-cdcd32da7495
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/8357976
Reviewed-by: richard winterton <rrwinterton@gmail.com>
Files Modified:
- BUILD.bazel
- libyuv.bzl
24b6126b0ed5c139476407fc55ec8a601c028aa5 by Frank Barchard <fbarchard@google.com>
https://chromium.googlesource.com/libyuv/libyuv//+/24b6126b0ed5c139476407fc55ec8a601c028aa5
Authored: 2026-09-08 16:37:54 -0700
Committed: 2026-09-08 17:49:34 -0700
[libyuv] Cast stride to size_t in test buffer allocation and memset
In convert_argb_test.cc and planar_test.cc, cast stride to size_t in
align_buffer_page_end and memset calls to eliminate GCC 15
-Wstringop-overflow warnings.
Delete redundant (int) casts on sizeof in convert_argb_test.cc.
Test: cmake -B out/Release -DUNIT_TEST=ON && cmake --build out/Release
Bug: none
Change-Id: If9062fb066b1361c86bb73041b6b08bff4c1747c
TAG=agy
CONV=06856819-10a7-4815-93d3-cdcd32da7495
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/8373923
Reviewed-by: richard winterton <rrwinterton@gmail.com>
Files Modified:
- unit_test/convert_argb_test.cc
- unit_test/planar_test.cc
af1aaca84027a69ab25f251ade1bf1714b180d89 by Frank Barchard <fbarchard@google.com>
https://chromium.googlesource.com/libyuv/libyuv//+/af1aaca84027a69ab25f251ade1bf1714b180d89
Authored: 2026-09-03 13:20:08 -0700
Committed: 2026-09-04 13:20:27 -0700
Enable RVV support in CMake and Bazel for RISC-V targets
Enable RISC-V Vector (RVV) by default when building natively on RISC-V
platforms (such as SpacemiT K1/K3) using CMake and Bazel:
- CMakeLists.txt: Detect riscv64 and riscv32, probe compiler support
for -march=rv64gcv / -march=rv32gcv, and append architecture flags
with auto-vectorization disabled (-fno-vectorize -fno-slp-vectorize).
Support custom architecture flags via -DRISCV_COMPILER_FLAGS and
provide -DUSE_RVV=OFF to disable. - BUILD.bazel: Add RVV_COPTS for @platforms//cpu:riscv64 and
@platforms//cpu:riscv32 with -fno-vectorize. - docs/getting_started.md: Document native SBC builds, custom targets
(SiFive X280, Coral 32-bit Zve32x), Bazel, and Blaze commands.
Test: cmake build on host and simulated riscv64; clang cross-compile tests
Bug: none
Change-Id: Iecb20b73b2934b6477e7e0c71b3539a8251e4e8b
TAG=agy
CONV=2f28dd8a-c892-4c29-8aed-606afd090398
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/8349493
Reviewed-by: richard winterton <rrwinterton@gmail.com>
Commit-Queue: Frank Barchard <fbarchard@google.com>
Files Modified:
- BUILD.bazel
- CMakeLists.txt
- docs/getting_started.md
e58eeea3694957cde6ee2e86769eb8a1c650d005 by Frank Barchard <fbarchard@google.com>
https://chromium.googlesource.com/libyuv/libyuv//+/e58eeea3694957cde6ee2e86769eb8a1c650d005
Authored: 2026-09-04 11:23:02 -0700
Committed: 2026-09-04 12:23:24 -0700
[libyuv] Add SwapUVRow_AVX2 and NV12ToNV21
Add SwapUVRow_AVX2 implementation in row_win.cc for MSVC and enable
HAS_SWAPUVROW_AVX2 under USE_ROW_WIN.
Share kShuffleUVToVU shuffle table between SSSE3 and AVX2 in row_gcc.cc.
Make NV12ToNV21 the primary implementation and alias NV21ToNV12 to it.
Add NV12ToNV21 test in convert_test.cc and benchmark dispatch for
SSSE3 and AVX2 in planar_test.cc.
CPU Before After Speedup
Intel Granite Rapids 282 ms 125 ms 2.26x
Intel Emerald Rapids 264 ms 108 ms 2.44x
Intel Sapphire Rapids 276 ms 122 ms 2.26x
Intel Ice Lake 310 ms 122 ms 2.54x
Intel Skylake-X 573 ms 157 ms 3.65x
Intel Haswell 620 ms 162 ms 3.83x
AMD Zen 4 (Genoa) 266 ms 52 ms 5.12x
AMD Zen 6 (Venice) 229 ms 43 ms 5.33x
ARM Neoverse-N1 140 ms 71 ms 1.97x
NVIDIA Grace (Neoverse-V2) 62 ms 69 ms 0.90x
Test: libyuv_unittest --gtest_filter=SwapUV:NV12ToNV21:NV21ToNV12
Bug: 406251841
Change-Id: I9bed5522aedadea13cdf69c27e3cbe633e31dd5b
TAG=agy
CONV=bb50ac62-0c55-4969-8fff-c71ab3d9a79f
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/8356968
Reviewed-by: richard winterton <rrwinterton@gmail.com>
Commit-Queue: Frank Barchard <fbarchard@google.com>
Files Modified:
- README.chromium
- include/libyuv/planar_functions.h
- include/libyuv/row.h
- include/libyuv/version.h
- source/planar_functions.cc
- source/row_gcc.cc
- source/row_win.cc
- unit_test/convert_test.cc
- unit_test/planar_test.cc
fc0dc6c339865747589b3f3e370de7c2340f5426 by Frank Barchard <fbarchard@google.com>
https://chromium.googlesource.com/libyuv/libyuv//+/fc0dc6c339865747589b3f3e370de7c2340f5426
Authored: 2026-09-03 10:41:54 -0700
Committed: 2026-09-03 11:02:07 -0700
[libyuv] Update build files with missing sources and sort lists
Update Android.bp, Android.mk, BUILD.gn, CMakeLists.txt, and
libyuv.gypi:
- Android.bp: add unit_test/convert_argb_test.cc to test sources
- Android.mk: add source/row_rvv.cc and source/scale_rvv.cc
- BUILD.gn: add include/libyuv/cpu_support.h and
include/libyuv/row_sve.h - CMakeLists.txt: alphabetize source files (convert, convert_from,
rotate, scale) - libyuv.gypi: add include/libyuv/row_sve.h
Test: ninja -C out/Release libyuv_unittest
Bug: none
Change-Id: I849afd01184b9869f7ceeaee0de741470a356236
TAG=agy
CONV=cce98608-1165-4cea-810b-110e34f4fd18
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/8350015
Commit-Queue: Frank Barchard <fbarchard@google.com>
Reviewed-by: Wan-Teh Chang <wtc@google.com>
Files Modified:
- Android.bp
- Android.mk
- BUILD.gn
- CMakeLists.txt
- libyuv.gypi
a7c0e17c5aaefcbe6b0c35e17fa0a83727370f0a by Frank Barchard <fbarchard@google.com>
https://chromium.googlesource.com/libyuv/libyuv//+/a7c0e17c5aaefcbe6b0c35e17fa0a83727370f0a
Authored: 2026-09-02 11:30:38 -0700
Committed: 2026-09-02 13:16:30 -0700
Fix unaligned memory accesses in RVV scaling kernels
- instead of 64 bit load, use vlseg2 with 32 bit
Test build with:
-fsanitize=alignment -fsanitize-trap=alignment
Test: libyuv_unittest --gtest_filter=UVScale:ScalePlane:ARGBScale
Bug: 553156658
Change-Id: Ib6febe49f085f5b3deb33adb6b6f82f7d836c3fa
TAG=agy
CONV=b29f62f9-15a4-4f38-8414-86c8330e61fb
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/8315435
Reviewed-by: Wan-Teh Chang <wtc@google.com>
Commit-Queue: Frank Barchard <fbarchard@google.com>
Files Modified:
- README.chromium
- include/libyuv/version.h
- source/scale_rvv.cc
f51ad56a3e2d66bcaf5e4eba18d043eb68b7823c by Frank Barchard <fbarchard@google.com>
https://chromium.googlesource.com/libyuv/libyuv//+/f51ad56a3e2d66bcaf5e4eba18d043eb68b7823c
Authored: 2026-09-01 18:53:39 -0700
Committed: 2026-09-01 19:08:52 -0700
Multiply_16 port to avx512, rvv, neon 32 bit, and windows - Also remove redundant neon check for I8MM kernels
======================================================================
CPU Before After Speedup
Intel Granite Rapids (AVX10.1) 251 ms 141 ms 1.78x (+43.8%)
Intel Emerald Rapids (AVX512) 199 ms 108 ms 1.84x (+45.7%)
Intel Sapphire Rapids (AVX512) 230 ms 112 ms 2.05x (+51.3%)
AMD Turin Zen 5 (AVX512) 156 ms 99 ms 1.58x (+36.5%)
AMD Venice Zen 6 (AVX512) 204 ms 106 ms 1.92x (+48.0%)
Intel Skylake-X (AVX512) 320 ms 156 ms 2.05x (+51.2%)
AMD Genoa Zen 4 (AVX512) 236 ms 346 ms 0.68x (-46.6%)
Intel Ice Lake (AVX512) 242 ms 316 ms 0.77x (-30.6%)
AMD Milan Zen 3 (AVX2) 252 ms 230 ms 1.10x (+8.7%)
Intel Haswell (AVX2) 369 ms 456 ms 0.81x (-23.6%)
NVIDIA Grace (SVE2) 336 ms 337 ms 1.00x (-0.3%)
ARM Neoverse-N1 (NEON) 1081 ms 1105 ms 0.98x (-2.2%)
Bug: 537818862
Change-Id: I3ddeddb040fc52a30dabe7ae2c71d16dda021568
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/8343467
Reviewed-by: richard winterton <rrwinterton@gmail.com>
Commit-Queue: Frank Barchard <fbarchard@google.com>
Files Modified:
- include/libyuv/row.h
- source/convert.cc
- source/convert_from_argb.cc
- source/planar_functions.cc
- source/row_any.cc
- source/row_gcc.cc
- source/row_rvv.cc
- source/row_win.cc
- unit_test/planar_test.cc
e111db837a1987c52beb1e6d170fbb8f5f5627a1 by Frank Barchard <fbarchard@google.com>
https://chromium.googlesource.com/libyuv/libyuv//+/e111db837a1987c52beb1e6d170fbb8f5f5627a1
Authored: 2026-08-28 15:58:06 -0700
Committed: 2026-09-01 17:00:40 -0700
Add I422ToAR30Row_RVV for RISC-V Vector
Bug: none
Change-Id: I39f28554b455356c4494c5bea5bdbb04aefff22c
TAG=agy
CONV=abcd6ba2-e3a4-49ba-a3fc-3b6b55b83509
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/8311933
Commit-Queue: Frank Barchard <fbarchard@google.com>
Reviewed-by: Wan-Teh Chang <wtc@google.com>
Files Modified:
- include/libyuv/row.h
- source/convert_argb.cc
- source/row_rvv.cc
2fcc1272dd3eb27e1363e7e7218ef192d2a4e080 by Frank Barchard <fbarchard@google.com>
https://chromium.googlesource.com/libyuv/libyuv//+/2fcc1272dd3eb27e1363e7e7218ef192d2a4e080
Authored: 2026-09-01 13:39:10 -0700
Committed: 2026-09-01 16:07:23 -0700
Convert8To16 takes bits instead of scale. - NV16/24 FOURCC and document - Rotate take uint8* for ubsan
Bug: 537818862
Change-Id: I2bc7109abaffe2464e031e33c22296c007077d82
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/8339427
Commit-Queue: Frank Barchard <fbarchard@google.com>
Reviewed-by: richard winterton <rrwinterton@gmail.com>
Files Modified:
- README.chromium
- docs/formats.md
- include/libyuv/planar_functions.h
- include/libyuv/row.h
- include/libyuv/version.h
- include/libyuv/video_common.h
- source/convert_from.cc
- source/convert_to_argb.cc
- source/convert_to_i420.cc
- source/planar_functions.cc
- source/rotate_common.cc
- source/row_any.cc
- source/row_common.cc
- source/row_gcc.cc
- source/row_neon.cc
- source/row_neon64.cc
- source/row_rvv.cc
- source/row_sme.cc
- source/row_win.cc
- unit_test/convert_argb_test.cc
- unit_test/convert_test.cc
- unit_test/planar_test.cc
- unit_test/video_common_test.cc
addfba3a7c656e586393c8669ac7650a77937d0e by Nikolay Baklicharov <thestorm.nik@gmail.com>
https://chromium.googlesource.com/libyuv/libyuv//+/addfba3a7c656e586393c8669ac7650a77937d0e
Authored: 2025-01-28 15:27:10 +0200
Committed: 2026-09-01 16:02:47 -0700
Add CMake option to enable/disable JPEG
Bug: 389970330
Change-Id: I25dc0237651fdac7ef43291da09916b0fbfa93d4
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6203403
Reviewed-by: Wan-Teh Chang <wtc@google.com>
Reviewed-by: Frank Barchard <fbarchard@google.com>
Files Modified:
- CMakeLists.txt
bcb6b7628306366b66d4f0b00d6ff09e11ca16e9 by Sida Zhu <zhusida@bytedance.com>
https://chromium.googlesource.com/libyuv/libyuv//+/bcb6b7628306366b66d4f0b00d6ff09e11ca16e9
Authored: 2026-09-01 18:01:49 +0800
Committed: 2026-09-01 12:56:28 -0700
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>
Files Modified:
- include/libyuv/convert_from_argb.h
- source/convert_from_argb.cc
- unit_test/convert_test.cc
af714f0810d235b93595228d143e1f4e992838cf by Frank Barchard <fbarchard@google.com>
https://chromium.googlesource.com/libyuv/libyuv//+/af714f0810d235b93595228d143e1f4e992838cf
Authored: 2026-09-01 11:10:30 -0700
Committed: 2026-09-01 12:21:37 -0700
Convert8To16 use shift to allow scale=65536 - Add avx512bw, neon 32 bit and RVV versions - Adapt SSE2 to psrlw instead of pmulhuw
CPU Before After Improvement
Granite Rapids (AVX10) 77 ms 75 ms +2.6% (1.03x)
Emerald Rapids (AVX512) 75 ms 67 ms +10.7% (1.12x)
Sapphire Rapids (AVX512) 91 ms 85 ms +6.6% (1.07x)
AMD Venice Zen 6 (AVX512) 30 ms 30 ms 0.0% (1.00x)
AMD Turin Zen 5 (AVX512) 32 ms 32 ms 0.0% (1.00x)
AMD Genoa Zen 4 (AVX512) 35 ms 36 ms -2.9% (0.97x)
Skylake-X (AVX512) 119 ms 119 ms 0.0% (1.00x)
Ice Lake (AVX512) 93 ms 104 ms -11.8% (0.89x)
AMD Milan Zen 3 (AVX2) 43 ms 44 ms -2.3% (0.98x)
Haswell (AVX2) 129 ms 138 ms -7.0% (0.93x)
NVIDIA Grace (SVE2) 42 ms 43 ms -2.4% (0.98x)
Neoverse-N1 (NEON) 87 ms 87 ms 0.0% (1.00x)
Bug: None
Change-Id: Ia8f310a70c8b1229927fcdf117fe22e131d70ea9
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/8330912
Commit-Queue: Frank Barchard <fbarchard@google.com>
Reviewed-by: richard winterton <rrwinterton@gmail.com>
Files Modified:
- README.chromium
- include/libyuv/row.h
- include/libyuv/version.h
- source/planar_functions.cc
- source/row_any.cc
- source/row_common.cc
- source/row_gcc.cc
- source/row_neon.cc
- source/row_neon64.cc
- source/row_rvv.cc
- source/row_win.cc
- unit_test/planar_test.cc
2f74e7a78486ea6c977b3d09527a2bb2f12d44c9 by yuanhecai <yuanhecai@loongson.cn>
https://chromium.googlesource.com/libyuv/libyuv//+/2f74e7a78486ea6c977b3d09527a2bb2f12d44c9
Authored: 2026-08-26 16:12:59 +0800
Committed: 2026-08-31 20:57:42 -0700
loongarch: Fix per-ISA build flags
Compile LSX and LASX sources separately (-mlsx vs -mlasx)
to avoid emitting LASX instructions in LSX kernels, which
crashed on LSX-only CPUs.
Change-Id: I56003cee9bb750cdac8fa19a5c95efb8889ba9e0
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/8294723
Reviewed-by: Wan-Teh Chang <wtc@google.com>
Commit-Queue: Wan-Teh Chang <wtc@google.com>
Reviewed-by: Frank Barchard <fbarchard@google.com>
Files Modified:
- CMakeLists.txt
60102bd795faf855e67a2f026797c16a25b4c42c by yuanhecai <yuanhecai@loongson.cn>
https://chromium.googlesource.com/libyuv/libyuv//+/60102bd795faf855e67a2f026797c16a25b4c42c
Authored: 2026-08-25 19:29:00 +0800
Committed: 2026-08-31 20:57:34 -0700
loongarch: Fix RGBToY SIMD
Add missing RGBToYMatrixRow_Any_{LSX,LASX} and kAddY offset fix so
RAW/RGB24 to YUV works on LoongArch.
Change-Id: I4c990a3705d7f521fa6d0c9e7e01f1e36f81c379
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/8292090
Reviewed-by: Wan-Teh Chang <wtc@google.com>
Reviewed-by: Frank Barchard <fbarchard@google.com>
Commit-Queue: Wan-Teh Chang <wtc@google.com>
Files Modified:
- include/libyuv/row.h
- source/convert.cc
- source/convert_from_argb.cc
- source/row_any.cc
- source/row_lasx.cc
- source/row_lsx.cc
2fed9193c94d3701f36188351bd5251854762cb6 by Frank Barchard <fbarchard@google.com>
https://chromium.googlesource.com/libyuv/libyuv//+/2fed9193c94d3701f36188351bd5251854762cb6
Authored: 2026-08-28 13:20:09 -0700
Committed: 2026-08-28 15:30:12 -0700
ARGBScale and UV use uint8_t for -fsanitize=alignment
Test: libyuv_unittest built/run with -fsanitize=alignment
Bug: 553156658
TAG=agy
CONV=42e6e965-3e33-4fd8-8697-b46f2588e5b2
Change-Id: I1c9a3a520caa1b4681d499e1aa36b98a2bd40ba7
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/8308575
Commit-Queue: Frank Barchard <fbarchard@google.com>
Reviewed-by: richard winterton <rrwinterton@gmail.com>
Files Modified:
- README.chromium
- include/libyuv/version.h
- source/scale_common.cc
- unit_test/planar_test.cc
7ad044836d037345f4e3df077c51df8f4015dc86 by Wan-Teh Chang <wtc@google.com>
https://chromium.googlesource.com/libyuv/libyuv//+/7ad044836d037345f4e3df077c51df8f4015dc86
Authored: 2026-08-28 13:29:33 -0700
Committed: 2026-08-28 15:17:28 -0700
Do not use glob in the hdrs list of libyuv library
Some headers in the include/libyuv directory are private headers and
should not be visible to the clients of the libyuv library target. List
the public headers explicitly in the hdrs list of the libyuv library
target.
Ideally those private headers should be moved to some other directory
such as the source/ directory.
Change-Id: I04b1e209f6891f06c688fcf0bf5d167e82a27818
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/8308801
Reviewed-by: Mirko Bonadei <mbonadei@chromium.org>
Commit-Queue: Wan-Teh Chang <wtc@google.com>
Reviewed-by: Frank Barchard <fbarchard@google.com>
Files Modified:
- BUILD.bazel
- libyuv.bzl
8585efd4bde2ab4e58b1d51eb8aba853d5ef459a by Wan-Teh Chang <wtc@google.com>
https://chromium.googlesource.com/libyuv/libyuv//+/8585efd4bde2ab4e58b1d51eb8aba853d5ef459a
Authored: 2026-08-28 08:41:32 -0700
Committed: 2026-08-28 08:59:01 -0700
Fix clang-tidy warnings
- source/convert_from_argb.cc should include libyuv/convert.h because
it calls ARGBToI420Matrix(). - Include <string.h> for memset().
Change-Id: I3f4841fe604639c7357148ef4788fe0415f0b81b
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/8255654
Commit-Queue: Wan-Teh Chang <wtc@google.com>
Reviewed-by: Frank Barchard <fbarchard@google.com>
Files Modified:
- source/convert_from_argb.cc
- unit_test/convert_argb_test.cc
- unit_test/convert_test.cc
0c781f87b82a95a3fd68ff51808cc89fb2d70572 by Frank Barchard <fbarchard@google.com>
https://chromium.googlesource.com/libyuv/libyuv//+/0c781f87b82a95a3fd68ff51808cc89fb2d70572
Authored: 2026-08-27 18:36:37 -0700
Committed: 2026-08-28 08:32:19 -0700
[libyuv] Keep LIBYUV_API in basic_types.h and remove legacy types and bool macros
Reduces include/libyuv/basic_types.h to only define LIBYUV_API.
Directly includes <stdint.h> and <stddef.h> where needed in public
headers.
Replaces LIBYUV_BOOL, LIBYUV_FALSE, and LIBYUV_TRUE with C++ bool,
true, and false in C++ code (MJpegDecoder, unit tests) and int (0, 1)
for C API functions.
Updates documentation and unit tests.
Test: ninja -C out/Release libyuv_unittest && ./out/Release/libyuv_unittest --gtest_filter=*
Change-Id: I2d58e872f0f976263bcda546dcc3b1b5f7e53d58
TAG=agy
CONV=2730bc56-93ff-48ed-b615-dcde1b834394
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/8280662
Commit-Queue: Wan-Teh Chang <wtc@google.com>
Reviewed-by: Wan-Teh Chang <wtc@google.com>
Files Modified:
- docs/formats.md
- include/libyuv/basic_types.h
- include/libyuv/compare.h
- include/libyuv/compare_row.h
- include/libyuv/convert.h
- include/libyuv/convert_argb.h
- include/libyuv/convert_from.h
- include/libyuv/convert_from_argb.h
- include/libyuv/cpu_id.h
- include/libyuv/mjpeg_decoder.h
- include/libyuv/planar_functions.h
- include/libyuv/rotate.h
- include/libyuv/rotate_argb.h
- include/libyuv/rotate_row.h
- include/libyuv/row.h
- include/libyuv/scale.h
- include/libyuv/scale_argb.h
- include/libyuv/scale_rgb.h
- include/libyuv/scale_row.h
- include/libyuv/scale_uv.h
- include/libyuv/video_common.h
- source/compare.cc
- source/compare_common.cc
- source/compare_gcc.cc
- source/compare_neon.cc
- source/compare_neon64.cc
- source/compare_win.cc
- source/convert.cc
- source/convert_from.cc
- source/convert_from_argb.cc
- source/convert_jpeg.cc
- source/convert_to_argb.cc
- source/convert_to_i420.cc
- source/mjpeg_decoder.cc
- source/mjpeg_validate.cc
- source/rotate_any.cc
- source/rotate_neon.cc
- source/rotate_neon64.cc
- source/rotate_sme.cc
- source/row_any.cc
- source/row_common.cc
- source/scale.cc
- source/scale_any.cc
- unit_test/basictypes_test.cc
- unit_test/color_test.cc
- unit_test/compare_test.cc
- unit_test/convert_argb_test.cc
- unit_test/convert_test.cc
- unit_test/cpu_test.cc
- unit_test/math_test.cc
- unit_test/unit_test.cc
- unit_test/unit_test.h
- util/compare.cc
cb6c9d6fd9c74e01a799402ee59c9c04ca561346 by Frank Barchard <fbarchard@google.com>
https://chromium.googlesource.com/libyuv/libyuv//+/cb6c9d6fd9c74e01a799402ee59c9c04ca561346
Authored: 2026-08-27 16:46:43 -0700
Committed: 2026-08-27 17:42:40 -0700
Remove LIBYUV_UNBIASED_DATA and make unbiased AR30 rounding default
Remove the LIBYUV_UNBIASED_DATA macro and make the unbiased AR30
rounding bias adjustment (+24 / -24) default across all x86, ARM, and C
implementations.
Bug: 551985141
Test: libyuv_unittest --gtest_filter=AR30:AB30
Change-Id: I4a9b964ceef1d08580789cbba8c94846053c9d68
TAG=agy
CONV=15289919-ad91-40b2-9ed5-30c3117a5ba4
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/8305516
Commit-Queue: Wan-Teh Chang <wtc@google.com>
Reviewed-by: Wan-Teh Chang <wtc@google.com>
Files Modified:
- BUILD.bazel
- BUILD.gn
- CMakeLists.txt
- docs/getting_started.md
- include/libyuv/row_sve.h
- include/libyuv/version.h
- source/row_common.cc
- source/row_gcc.cc
- source/row_neon64.cc
- source/row_win.cc
| Reporter | ||
Comment 1•16 days ago
|
||
| DcFWjYu2R7SgFAC7JnOOZA | ||
I've submitted a try run for this commit: https://treeherder.mozilla.org/jobs?repo=try&revision=97d2f02dfa23ce6af2c9abcd42882857d3024f94
| Reporter | ||
Comment 2•16 days ago
|
||
| Reporter | ||
Comment 3•16 days ago
|
||
| Reporter | ||
Comment 4•15 days ago
|
||
| Bh1ip4q_SdySUfnEKl3PDw | ||
The try push is done, we found jobs with unclassified failures.
Needs Close Investigation:
-
dom/media/webrtc/tests/mochitests/test_peerConnection_addtrack_removetrack_events.html
- 4 of 4 failed on the same (retriggered) task
- test-linux2404-64/opt-mochitest-media-spi (d87ixAoqR9C8F8QmdpRg7w)
- test-linux2404-64/opt-mochitest-media-spi (UOsU1E-KRLee3NcIGglCqQ)
- test-linux2404-64/opt-mochitest-media-spi (BNcEbb11RX-bH6e0TpHp0A)
- test-linux2404-64/opt-mochitest-media-spi (TjKKHOocTQuvNBYgPwQcpA)
- 4 of 4 failed on the same (retriggered) task
-
dom/media/webrtc/tests/mochitests/test_peerConnection_basicAV1Video.html
- 4 of 4 failed on the same (retriggered) task
- test-linux2404-64/opt-mochitest-media-spi (d87ixAoqR9C8F8QmdpRg7w)
- test-linux2404-64/opt-mochitest-media-spi (UOsU1E-KRLee3NcIGglCqQ)
- test-linux2404-64/opt-mochitest-media-spi (BNcEbb11RX-bH6e0TpHp0A)
- test-linux2404-64/opt-mochitest-media-spi (TjKKHOocTQuvNBYgPwQcpA)
- 4 of 4 failed on the same (retriggered) task
-
dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioVideo.html
- 4 of 4 failed on the same (retriggered) task
- test-linux2404-64/opt-mochitest-media-spi (d87ixAoqR9C8F8QmdpRg7w)
- test-linux2404-64/opt-mochitest-media-spi (UOsU1E-KRLee3NcIGglCqQ)
- test-linux2404-64/opt-mochitest-media-spi (BNcEbb11RX-bH6e0TpHp0A)
- test-linux2404-64/opt-mochitest-media-spi (TjKKHOocTQuvNBYgPwQcpA)
- 4 of 4 failed on the same (retriggered) task
-
dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioVideoCombined.html
- 4 of 4 failed on the same (retriggered) task
- test-linux2404-64/opt-mochitest-media-spi (d87ixAoqR9C8F8QmdpRg7w)
- test-linux2404-64/opt-mochitest-media-spi (UOsU1E-KRLee3NcIGglCqQ)
- test-linux2404-64/opt-mochitest-media-spi (BNcEbb11RX-bH6e0TpHp0A)
- test-linux2404-64/opt-mochitest-media-spi (TjKKHOocTQuvNBYgPwQcpA)
- 4 of 4 failed on the same (retriggered) task
-
dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioVideoNoBundle.html
- 4 of 4 failed on the same (retriggered) task
- test-linux2404-64/opt-mochitest-media-spi (d87ixAoqR9C8F8QmdpRg7w)
- test-linux2404-64/opt-mochitest-media-spi (UOsU1E-KRLee3NcIGglCqQ)
- test-linux2404-64/opt-mochitest-media-spi (BNcEbb11RX-bH6e0TpHp0A)
- test-linux2404-64/opt-mochitest-media-spi (TjKKHOocTQuvNBYgPwQcpA)
- 4 of 4 failed on the same (retriggered) task
-
dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioVideoNoBundleNoRtcpMux.html
- 4 of 4 failed on the same (retriggered) task
- test-linux2404-64/opt-mochitest-media-spi (d87ixAoqR9C8F8QmdpRg7w)
- test-linux2404-64/opt-mochitest-media-spi (UOsU1E-KRLee3NcIGglCqQ)
- test-linux2404-64/opt-mochitest-media-spi (BNcEbb11RX-bH6e0TpHp0A)
- test-linux2404-64/opt-mochitest-media-spi (TjKKHOocTQuvNBYgPwQcpA)
- 4 of 4 failed on the same (retriggered) task
-
dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioVideoNoRtcpMux.html
- 4 of 4 failed on the same (retriggered) task
- test-linux2404-64/opt-mochitest-media-spi (d87ixAoqR9C8F8QmdpRg7w)
- test-linux2404-64/opt-mochitest-media-spi (UOsU1E-KRLee3NcIGglCqQ)
- test-linux2404-64/opt-mochitest-media-spi (BNcEbb11RX-bH6e0TpHp0A)
- test-linux2404-64/opt-mochitest-media-spi (TjKKHOocTQuvNBYgPwQcpA)
- 4 of 4 failed on the same (retriggered) task
-
dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioVideoTransceivers.html
- 4 of 4 failed on the same (retriggered) task
- test-linux2404-64/opt-mochitest-media-spi (d87ixAoqR9C8F8QmdpRg7w)
- test-linux2404-64/opt-mochitest-media-spi (UOsU1E-KRLee3NcIGglCqQ)
- test-linux2404-64/opt-mochitest-media-spi (BNcEbb11RX-bH6e0TpHp0A)
- test-linux2404-64/opt-mochitest-media-spi (TjKKHOocTQuvNBYgPwQcpA)
- 4 of 4 failed on the same (retriggered) task
-
dom/media/webrtc/tests/mochitests/test_peerConnection_basicH264Video.html
- 4 of 4 failed on the same (retriggered) task
- test-linux2404-64/opt-mochitest-media-spi (d87ixAoqR9C8F8QmdpRg7w)
- test-linux2404-64/opt-mochitest-media-spi (UOsU1E-KRLee3NcIGglCqQ)
- test-linux2404-64/opt-mochitest-media-spi (BNcEbb11RX-bH6e0TpHp0A)
- test-linux2404-64/opt-mochitest-media-spi (TjKKHOocTQuvNBYgPwQcpA)
- 4 of 4 failed on the same (retriggered) task
-
dom/media/webrtc/tests/mochitests/test_peerConnection_basicVideo.html
- 4 of 4 failed on the same (retriggered) task
- test-linux2404-64/opt-mochitest-media-spi (d87ixAoqR9C8F8QmdpRg7w)
- test-linux2404-64/opt-mochitest-media-spi (UOsU1E-KRLee3NcIGglCqQ)
- test-linux2404-64/opt-mochitest-media-spi (BNcEbb11RX-bH6e0TpHp0A)
- test-linux2404-64/opt-mochitest-media-spi (TjKKHOocTQuvNBYgPwQcpA)
- 4 of 4 failed on the same (retriggered) task
-
dom/media/webrtc/tests/mochitests/test_peerConnection_basicVideoVerifyRtpHeaderExtensions.html
- 4 of 4 failed on the same (retriggered) task
- test-linux2404-64/opt-mochitest-media-spi (d87ixAoqR9C8F8QmdpRg7w)
- test-linux2404-64/opt-mochitest-media-spi (UOsU1E-KRLee3NcIGglCqQ)
- test-linux2404-64/opt-mochitest-media-spi (BNcEbb11RX-bH6e0TpHp0A)
- test-linux2404-64/opt-mochitest-media-spi (TjKKHOocTQuvNBYgPwQcpA)
- 4 of 4 failed on the same (retriggered) task
-
dom/media/webrtc/tests/mochitests/test_peerConnection_checkPacketDumpHook.html
- 4 of 4 failed on the same (retriggered) task
- test-linux2404-64/opt-mochitest-media-spi (d87ixAoqR9C8F8QmdpRg7w)
- test-linux2404-64/opt-mochitest-media-spi (UOsU1E-KRLee3NcIGglCqQ)
- test-linux2404-64/opt-mochitest-media-spi (BNcEbb11RX-bH6e0TpHp0A)
- test-linux2404-64/opt-mochitest-media-spi (TjKKHOocTQuvNBYgPwQcpA)
- 4 of 4 failed on the same (retriggered) task
-
dom/media/webrtc/tests/mochitests/test_peerConnection_constructedStream.html
- 4 of 4 failed on the same (retriggered) task
- test-linux2404-64/opt-mochitest-media-spi (d87ixAoqR9C8F8QmdpRg7w)
- test-linux2404-64/opt-mochitest-media-spi (UOsU1E-KRLee3NcIGglCqQ)
- test-linux2404-64/opt-mochitest-media-spi (BNcEbb11RX-bH6e0TpHp0A)
- test-linux2404-64/opt-mochitest-media-spi (TjKKHOocTQuvNBYgPwQcpA)
- 4 of 4 failed on the same (retriggered) task
These failures could mean that the library update changed something and caused
tests to fail. You'll need to review them yourself and decide where to go from here.
In either event, I have done all I can and you will need to take it from here. If you
don't want to land my patch, you can replicate it locally for editing with
./mach vendor media/libyuv/moz.yaml
When reviewing, please note that this is external code, which needs a full and
careful inspection - not a rubberstamp.
Comment 5•10 days ago
|
||
This would be nice to have, especially for LoongArch (Loong64), since https://chromium.googlesource.com/libyuv/libyuv//+/60102bd795faf855e67a2f026797c16a25b4c42c fixes a compilation failure on it.
https://hg.mozilla.org/mozilla-central/rev/f532a36d6449
https://hg.mozilla.org/mozilla-central/rev/82e3da64d655
| Assignee | ||
Updated•3 days ago
|
Description
•