Skip to content

feat(0.1.0): row-primitive kernels with SIMD dispatch + Sink API (yuv420p, rgb→hsv, bgr↔rgb)#1

Merged
uqio merged 23 commits intomainfrom
feat/yuv420p
Apr 18, 2026
Merged

feat(0.1.0): row-primitive kernels with SIMD dispatch + Sink API (yuv420p, rgb→hsv, bgr↔rgb)#1
uqio merged 23 commits intomainfrom
feat/yuv420p

Conversation

@uqio
Copy link
Copy Markdown
Collaborator

@uqio uqio commented Apr 18, 2026

Summary

First substantive PR landing the v0.1.0 surface of colconv:

  • Row primitives with a per-call runtime dispatcher (cfg_select!, Rust 1.95+):
    • yuv_420_to_rgb_row — YUV 4:2:0 → packed RGB, chroma upsampled in registers.
    • rgb_to_hsv_row — OpenCV-compatible 8-bit HSV (integer LUT on scalar, rcp+Newton on x86, native divide on NEON/wasm).
    • bgr_to_rgb_row / rgb_to_bgr_row — channel-swap primitive.
  • 6 backends per kernel: scalar reference + NEON, SSE4.1, AVX2, AVX-512BW, wasm simd128. Dispatcher picks the best available tier at call time (cached atomic on std, compile-time on no_std).
  • Numerical contract: every backend is either bit-identical to scalar (YUV→RGB, swap) or within ±1 LSB (HSV — documented per backend). Enforced by in-module equivalence tests.
  • Sink API: PixelSink trait + per-format subtrait (Yuv420pSink); ships MixedSinker that writes any subset of {RGB, Luma, HSV} into caller buffers with a lazily-allocated scratch for HSV-without-RGB.
  • Frame types: Yuv420pFrame with stride-aware validated constructor.
  • ColorMatrix: Bt601 / Bt709 / Bt2020Ncl / Smpte240m / Fcc / YCgCo (non-exhaustive).
  • use_simd toggle on the dispatcher and MixedSinker::with_simd for A/B scalar-vs-SIMD benchmarking on the same input.
  • no_std ready: row, yuv, and the PixelSink trait compile with --no-default-features; only MixedSinker requires alloc for its Vec<u8> scratch.

CI

  • ci.yml: rustfmt, clippy (each-feature), feature-powerset build/test on Linux/macOS/Windows, cross-compile matrix (15 targets incl. wasm32, riscv64, powerpc64), Miri (TB + SB) on 7 targets, sanitizers, Intel SDE runner for AVX-512 coverage under Ice Lake emulation.
  • coverage.yml: 7-tier Codecov matrix (macOS NEON / scalar, Linux x86_64 default / avx2-max / sse41-max / scalar, Windows) so every dispatcher branch is exercised.
  • benchmark.yml: Criterion benches (yuv_420_to_rgb, rgb_to_hsv) with per-SIMD-tier runs and PR-comment integration.

Docs

  • docs/color-conversion-functions.md — full design rationale + 48-entry per-format implementation plan.
  • docs/hardware-decode-with-ffmpeg-next.md — how to feed VideoToolbox / VA-API / CUDA / D3D11VA hardware-decoded NV12/P010 frames into colconv.

Test plan

  • cargo test --all-features — 38 passing
  • cargo hack check --feature-powerset (7 combos incl. --no-default-features)
  • cargo hack clippy --each-feature -- -D warnings
  • Cross builds: wasm32-unknown-unknown, aarch64-unknown-linux-gnu
  • cargo fmt --check

Next

Hardware-decoder follow-ups (NV12 / P010 for VideoToolbox + VA-API HDR path) will land in a separate PR.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces a YUV420p (4:2:0 planar) conversion pipeline built around a Sink-based API, with scalar row primitives and multiple SIMD backends (NEON + x86 tiers) selected via runtime/compile-time dispatch.

Changes:

  • Adds a YUV420p row-walker kernel (yuv420p_to) and associated row/sink types.
  • Introduces MixedSinker to optionally produce RGB, luma, and/or HSV outputs per row.
  • Implements row-level primitives with scalar + SIMD backends (aarch64 NEON, x86 SSE4.1/AVX2/AVX-512) plus benches and CI coverage/benchmark workflows.

Reviewed changes

Copilot reviewed 26 out of 26 changed files in this pull request and generated 8 comments.

Show a summary per file
File Description
src/yuv/yuv420p.rs Adds YUV420p kernel + Yuv420pRow/Yuv420pSink row model.
src/yuv/mod.rs Exposes YUV module and re-exports YUV420p APIs.
src/sinker/mod.rs Adds sinker module entry + re-export for MixedSinker.
src/sinker/mixed.rs Implements MixedSinker (RGB/Luma/HSV), plus unit tests.
src/row/scalar.rs Adds scalar reference implementations for YUV420→RGB, RGB→HSV, and channel swap.
src/row/mod.rs Adds public row primitive dispatchers and CPU-feature detection helpers.
src/row/arch/mod.rs Wires up arch-specific SIMD backend modules.
src/row/arch/neon.rs Adds aarch64 NEON implementations for row primitives + equivalence tests.
src/row/arch/x86_common.rs Adds shared x86 SIMD helpers (interleave/deinterleave, swap, HSV helper).
src/row/arch/x86_sse41.rs Adds x86_64 SSE4.1 backend + equivalence tests.
src/row/arch/x86_avx2.rs Adds x86_64 AVX2 backend + equivalence tests.
src/row/arch/x86_avx512.rs Adds x86_64 AVX-512 backend + equivalence tests.
src/frame.rs Adds validated Yuv420pFrame with error reporting and tests.
src/lib.rs Establishes crate public API surface and top-level docs/types.
docs/color-conversion-functions.md Adds design/inventory doc for the Sink-based conversion plan.
benches/yuv_420_to_rgb.rs Adds Criterion benchmark for YUV420→RGB row primitive.
benches/rgb_to_hsv.rs Adds Criterion benchmark for RGB→HSV row primitive.
benches/foo.rs Removes placeholder benchmark.
ci/miri_tb.sh Adjusts Miri invocation flags/targets.
ci/miri_sb.sh Adjusts Miri invocation flags/targets.
Cargo.toml Renames crate to colconv, updates features/deps, configures benches.
.github/workflows/loc.yml Updates gist upload key/name and github-script version.
.github/workflows/ci.yml Updates scheduled cadence and cargo-hack invocations; removes loom/old coverage job.
.github/workflows/coverage.yml Adds multi-platform/tier tarpaulin coverage workflow + Codecov upload.
.github/workflows/benchmark.yml Adds multi-platform benchmark workflow + result aggregation/commenting.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/row/mod.rs
Comment thread src/row/mod.rs
Comment on lines +44 to +65
pub fn yuv_420_to_rgb_row(
y: &[u8],
u_half: &[u8],
v_half: &[u8],
rgb_out: &mut [u8],
width: usize,
matrix: ColorMatrix,
full_range: bool,
use_simd: bool,
) {
if use_simd {
cfg_select! {
target_arch = "aarch64" => {
if neon_available() {
// SAFETY: `neon_available()` verified NEON is present on this
// CPU. Bounds / parity invariants are the caller's obligation
// (same contract as the scalar reference); they are checked
// with `debug_assert` in debug builds.
unsafe {
arch::neon::yuv_420_to_rgb_row(y, u_half, v_half, rgb_out, width, matrix, full_range);
}
return;
Copy link

Copilot AI Apr 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These row dispatchers are pub fn (safe) but may call unsafe SIMD kernels that rely on unchecked pointer arithmetic. In release builds there are only debug_assert!s for width parity and slice lengths, so invalid inputs could cause UB. Add non-debug assert!/length checks before any SIMD call (or make these APIs unsafe and document the invariants).

Copilot uses AI. Check for mistakes.
Comment thread src/row/scalar.rs Outdated
Comment on lines +1 to +14
//! Shared helpers for the x86_64 SIMD backends.
//!
//! Items here use only SSE2 + SSSE3 intrinsics, so they're safe to
//! call from any x86 backend at SSSE3 or above (currently SSE4.1 and
//! AVX2; AVX‑512 will reuse them too). `#[inline(always)]` guarantees
//! they inline into the caller, inheriting its `#[target_feature]`
//! context.

use core::arch::x86_64::{
__m128, __m128i, _mm_add_ps, _mm_blendv_ps, _mm_cmpeq_ps, _mm_cmplt_ps, _mm_cvtepi32_ps,
_mm_cvtepu8_epi32, _mm_cvttps_epi32, _mm_loadu_si128, _mm_max_ps, _mm_min_ps, _mm_mul_ps,
_mm_or_si128, _mm_packus_epi16, _mm_packus_epi32, _mm_rcp_ps, _mm_set1_ps, _mm_setr_epi8,
_mm_setzero_ps, _mm_shuffle_epi8, _mm_srli_si128, _mm_storeu_si128, _mm_sub_ps,
};
Copy link

Copilot AI Apr 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The module header claims these helpers use only SSE2+SSSE3, but this file uses SSE4.1 intrinsics like _mm_cvtepu8_epi32, _mm_packus_epi32, and _mm_blendv_ps. Please update the comment (and any feature assumptions) so it’s clear SSE4.1 is required for these helpers.

Copilot uses AI. Check for mistakes.
Comment thread src/row/arch/x86_common.rs Outdated
Comment thread src/row/arch/x86_avx512.rs Outdated
Comment thread src/lib.rs Outdated
Comment thread docs/color-conversion-functions.md Outdated
@github-actions
Copy link
Copy Markdown

Benchmark Results

Benchmark Results Summary

Date: 2026-04-18 12:26:10 UTC

Benchmark Results for macos-aarch64-neon

System Information

  • OS: macos-latest
  • Arch: aarch64
  • SIMD tier: neon
  • Runner: GitHub Actions 1000007118
  • Runner arch (GH): ARM64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 12:24:00 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,005 ns/iter (+/- 653)
test rgb_to_hsv_row/simd/1280 ... bench:       1,587 ns/iter (+/- 235)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,000 ns/iter (+/- 274)
test rgb_to_hsv_row/simd/1920 ... bench:       2,385 ns/iter (+/- 158)
test rgb_to_hsv_row/scalar/3840 ... bench:      12,279 ns/iter (+/- 996)
test rgb_to_hsv_row/simd/3840 ... bench:       4,742 ns/iter (+/- 243)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       3,031 ns/iter (+/- 211)
test yuv_420_to_rgb_row/simd/1280 ... bench:         534 ns/iter (+/- 53)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       4,469 ns/iter (+/- 420)
test yuv_420_to_rgb_row/simd/1920 ... bench:         791 ns/iter (+/- 28)
test yuv_420_to_rgb_row/scalar/3840 ... bench:       9,227 ns/iter (+/- 2,162)
test yuv_420_to_rgb_row/simd/3840 ... bench:       1,592 ns/iter (+/- 155)

Benchmark Results for macos-aarch64-scalar

System Information

  • OS: macos-latest
  • Arch: aarch64
  • SIMD tier: scalar
  • Runner: GitHub Actions 1000007119
  • Runner arch (GH): ARM64
  • RUSTFLAGS: --cfg colconv_force_scalar
  • Date: 2026-04-18 12:23:57 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       3,985 ns/iter (+/- 286)
test rgb_to_hsv_row/simd/1280 ... bench:       3,996 ns/iter (+/- 339)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,174 ns/iter (+/- 1,131)
test rgb_to_hsv_row/simd/1920 ... bench:       6,024 ns/iter (+/- 631)
test rgb_to_hsv_row/scalar/3840 ... bench:      14,150 ns/iter (+/- 2,074)
test rgb_to_hsv_row/simd/3840 ... bench:      13,592 ns/iter (+/- 1,214)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       3,049 ns/iter (+/- 376)
test yuv_420_to_rgb_row/simd/1280 ... bench:       3,014 ns/iter (+/- 130)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       4,527 ns/iter (+/- 126)
test yuv_420_to_rgb_row/simd/1920 ... bench:       4,567 ns/iter (+/- 515)
test yuv_420_to_rgb_row/scalar/3840 ... bench:       9,276 ns/iter (+/- 785)
test yuv_420_to_rgb_row/simd/3840 ... bench:       9,251 ns/iter (+/- 1,209)

Benchmark Results for ubuntu-x86_64-avx2-max

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: avx2-max
  • Runner: GitHub Actions 1000007129
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_disable_avx512
  • Date: 2026-04-18 12:24:05 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       5,099 ns/iter (+/- 87)
test rgb_to_hsv_row/simd/1280 ... bench:       2,587 ns/iter (+/- 36)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,643 ns/iter (+/- 323)
test rgb_to_hsv_row/simd/1920 ... bench:       3,877 ns/iter (+/- 31)
test rgb_to_hsv_row/scalar/3840 ... bench:      15,349 ns/iter (+/- 785)
test rgb_to_hsv_row/simd/3840 ... bench:       7,758 ns/iter (+/- 22)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,763 ns/iter (+/- 181)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,005 ns/iter (+/- 3)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,212 ns/iter (+/- 17)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,504 ns/iter (+/- 5)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,362 ns/iter (+/- 639)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,013 ns/iter (+/- 18)

Benchmark Results for ubuntu-x86_64-default

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: default
  • Runner: GitHub Actions 1000007126
  • Runner arch (GH): X64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 12:24:11 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,917 ns/iter (+/- 124)
test rgb_to_hsv_row/simd/1280 ... bench:       2,790 ns/iter (+/- 46)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,372 ns/iter (+/- 25)
test rgb_to_hsv_row/simd/1920 ... bench:       4,185 ns/iter (+/- 6)
test rgb_to_hsv_row/scalar/3840 ... bench:      14,763 ns/iter (+/- 211)
test rgb_to_hsv_row/simd/3840 ... bench:       8,374 ns/iter (+/- 10)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,615 ns/iter (+/- 185)
test yuv_420_to_rgb_row/simd/1280 ... bench:         951 ns/iter (+/- 85)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,186 ns/iter (+/- 154)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,423 ns/iter (+/- 134)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,169 ns/iter (+/- 286)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,832 ns/iter (+/- 261)

Benchmark Results for ubuntu-x86_64-native

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: native
  • Runner: GitHub Actions 1000007125
  • Runner arch (GH): X64
  • RUSTFLAGS: -C target-cpu=native
  • Date: 2026-04-18 12:24:08 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       5,541 ns/iter (+/- 50)
test rgb_to_hsv_row/simd/1280 ... bench:       2,425 ns/iter (+/- 3)
test rgb_to_hsv_row/scalar/1920 ... bench:       8,299 ns/iter (+/- 26)
test rgb_to_hsv_row/simd/1920 ... bench:       3,637 ns/iter (+/- 8)
test rgb_to_hsv_row/scalar/3840 ... bench:      16,660 ns/iter (+/- 83)
test rgb_to_hsv_row/simd/3840 ... bench:       7,272 ns/iter (+/- 15)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,754 ns/iter (+/- 57)
test yuv_420_to_rgb_row/simd/1280 ... bench:         935 ns/iter (+/- 12)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,109 ns/iter (+/- 36)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,402 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,090 ns/iter (+/- 42)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,803 ns/iter (+/- 2)

Benchmark Results for ubuntu-x86_64-scalar

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: scalar
  • Runner: GitHub Actions 1000007127
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_force_scalar
  • Date: 2026-04-18 12:24:02 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,997 ns/iter (+/- 94)
test rgb_to_hsv_row/simd/1280 ... bench:       4,967 ns/iter (+/- 32)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,463 ns/iter (+/- 143)
test rgb_to_hsv_row/simd/1920 ... bench:       7,445 ns/iter (+/- 14)
test rgb_to_hsv_row/scalar/3840 ... bench:      15,469 ns/iter (+/- 50)
test rgb_to_hsv_row/simd/3840 ... bench:      15,552 ns/iter (+/- 101)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,630 ns/iter (+/- 189)
test yuv_420_to_rgb_row/simd/1280 ... bench:       4,631 ns/iter (+/- 23)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,059 ns/iter (+/- 23)
test yuv_420_to_rgb_row/simd/1920 ... bench:       6,961 ns/iter (+/- 63)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      13,972 ns/iter (+/- 107)
test yuv_420_to_rgb_row/simd/3840 ... bench:      13,980 ns/iter (+/- 145)

Benchmark Results for ubuntu-x86_64-sse41-max

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: sse41-max
  • Runner: GitHub Actions 1000007128
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_disable_avx512 --cfg colconv_disable_avx2
  • Date: 2026-04-18 12:24:03 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,681 ns/iter (+/- 44)
test rgb_to_hsv_row/simd/1280 ... bench:       2,858 ns/iter (+/- 38)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,986 ns/iter (+/- 174)
test rgb_to_hsv_row/simd/1920 ... bench:       4,282 ns/iter (+/- 12)
test rgb_to_hsv_row/scalar/3840 ... bench:      14,021 ns/iter (+/- 172)
test rgb_to_hsv_row/simd/3840 ... bench:       8,562 ns/iter (+/- 56)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       3,924 ns/iter (+/- 139)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,223 ns/iter (+/- 13)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       5,896 ns/iter (+/- 68)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,833 ns/iter (+/- 5)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      11,728 ns/iter (+/- 48)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,669 ns/iter (+/- 5)

Benchmark Results for windows-x86_64-default

System Information

  • OS: windows-latest
  • Arch: x86_64
  • SIMD tier: default
  • Runner: GitHub Actions 1000007121
  • Runner arch (GH): X64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 12:24:59 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,963 ns/iter (+/- 30)
test rgb_to_hsv_row/simd/1280 ... bench:       2,599 ns/iter (+/- 41)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,454 ns/iter (+/- 108)
test rgb_to_hsv_row/simd/1920 ... bench:       3,890 ns/iter (+/- 10)
test rgb_to_hsv_row/scalar/3840 ... bench:      15,078 ns/iter (+/- 162)
test rgb_to_hsv_row/simd/3840 ... bench:       7,787 ns/iter (+/- 101)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,564 ns/iter (+/- 68)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,010 ns/iter (+/- 5)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       6,940 ns/iter (+/- 317)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,515 ns/iter (+/- 12)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      13,839 ns/iter (+/- 168)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,046 ns/iter (+/- 24)

View detailed results

Detailed Criterion results have been uploaded as artifacts. Download them from the workflow run to view charts and detailed statistics.

@github-actions
Copy link
Copy Markdown

Benchmark Results

Benchmark Results Summary

Date: 2026-04-18 12:27:58 UTC

Benchmark Results for macos-aarch64-neon

System Information

  • OS: macos-latest
  • Arch: aarch64
  • SIMD tier: neon
  • Runner: GitHub Actions 1000007135
  • Runner arch (GH): ARM64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 12:26:09 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,178 ns/iter (+/- 965)
test rgb_to_hsv_row/simd/1280 ... bench:       2,271 ns/iter (+/- 605)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,577 ns/iter (+/- 7,014)
test rgb_to_hsv_row/simd/1920 ... bench:       3,025 ns/iter (+/- 553)
test rgb_to_hsv_row/scalar/3840 ... bench:      15,214 ns/iter (+/- 2,381)
test rgb_to_hsv_row/simd/3840 ... bench:       4,879 ns/iter (+/- 682)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       2,984 ns/iter (+/- 460)
test yuv_420_to_rgb_row/simd/1280 ... bench:         553 ns/iter (+/- 134)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       4,509 ns/iter (+/- 287)
test yuv_420_to_rgb_row/simd/1920 ... bench:         826 ns/iter (+/- 245)
test yuv_420_to_rgb_row/scalar/3840 ... bench:       9,533 ns/iter (+/- 1,218)
test yuv_420_to_rgb_row/simd/3840 ... bench:       1,624 ns/iter (+/- 204)

Benchmark Results for macos-aarch64-scalar

System Information

  • OS: macos-latest
  • Arch: aarch64
  • SIMD tier: scalar
  • Runner: GitHub Actions 1000007138
  • Runner arch (GH): ARM64
  • RUSTFLAGS: --cfg colconv_force_scalar
  • Date: 2026-04-18 12:26:46 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,011 ns/iter (+/- 868)
test rgb_to_hsv_row/simd/1280 ... bench:       3,984 ns/iter (+/- 367)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,243 ns/iter (+/- 948)
test rgb_to_hsv_row/simd/1920 ... bench:       5,985 ns/iter (+/- 3,839)
test rgb_to_hsv_row/scalar/3840 ... bench:      13,985 ns/iter (+/- 2,583)
test rgb_to_hsv_row/simd/3840 ... bench:      14,444 ns/iter (+/- 5,844)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       3,048 ns/iter (+/- 1,272)
test yuv_420_to_rgb_row/simd/1280 ... bench:       2,982 ns/iter (+/- 297)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       4,515 ns/iter (+/- 901)
test yuv_420_to_rgb_row/simd/1920 ... bench:       4,551 ns/iter (+/- 614)
test yuv_420_to_rgb_row/scalar/3840 ... bench:       9,347 ns/iter (+/- 1,098)
test yuv_420_to_rgb_row/simd/3840 ... bench:       9,276 ns/iter (+/- 2,180)

Benchmark Results for ubuntu-x86_64-avx2-max

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: avx2-max
  • Runner: GitHub Actions 1000007144
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_disable_avx512
  • Date: 2026-04-18 12:27:02 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       5,098 ns/iter (+/- 45)
test rgb_to_hsv_row/simd/1280 ... bench:       2,588 ns/iter (+/- 5)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,647 ns/iter (+/- 229)
test rgb_to_hsv_row/simd/1920 ... bench:       3,880 ns/iter (+/- 9)
test rgb_to_hsv_row/scalar/3840 ... bench:      15,356 ns/iter (+/- 288)
test rgb_to_hsv_row/simd/3840 ... bench:       7,764 ns/iter (+/- 30)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,766 ns/iter (+/- 169)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,005 ns/iter (+/- 2)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,205 ns/iter (+/- 85)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,504 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,369 ns/iter (+/- 113)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,013 ns/iter (+/- 7)

Benchmark Results for ubuntu-x86_64-default

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: default
  • Runner: GitHub Actions 1000007152
  • Runner arch (GH): X64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 12:27:42 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       5,092 ns/iter (+/- 31)
test rgb_to_hsv_row/simd/1280 ... bench:       2,834 ns/iter (+/- 90)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,639 ns/iter (+/- 501)
test rgb_to_hsv_row/simd/1920 ... bench:       4,250 ns/iter (+/- 134)
test rgb_to_hsv_row/scalar/3840 ... bench:      15,338 ns/iter (+/- 83)
test rgb_to_hsv_row/simd/3840 ... bench:       8,504 ns/iter (+/- 269)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,634 ns/iter (+/- 19)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,007 ns/iter (+/- 2)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,024 ns/iter (+/- 52)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,504 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,050 ns/iter (+/- 239)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,016 ns/iter (+/- 7)

Benchmark Results for ubuntu-x86_64-native

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: native
  • Runner: GitHub Actions 1000007150
  • Runner arch (GH): X64
  • RUSTFLAGS: -C target-cpu=native
  • Date: 2026-04-18 12:27:28 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       5,666 ns/iter (+/- 22)
test rgb_to_hsv_row/simd/1280 ... bench:       2,643 ns/iter (+/- 4)
test rgb_to_hsv_row/scalar/1920 ... bench:       8,498 ns/iter (+/- 168)
test rgb_to_hsv_row/simd/1920 ... bench:       3,965 ns/iter (+/- 44)
test rgb_to_hsv_row/scalar/3840 ... bench:      17,013 ns/iter (+/- 35)
test rgb_to_hsv_row/simd/3840 ... bench:       7,931 ns/iter (+/- 11)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       5,280 ns/iter (+/- 45)
test yuv_420_to_rgb_row/simd/1280 ... bench:         910 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,930 ns/iter (+/- 24)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,367 ns/iter (+/- 2)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      15,834 ns/iter (+/- 32)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,732 ns/iter (+/- 9)

Benchmark Results for ubuntu-x86_64-scalar

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: scalar
  • Runner: GitHub Actions 1000007143
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_force_scalar
  • Date: 2026-04-18 12:27:01 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,967 ns/iter (+/- 12)
test rgb_to_hsv_row/simd/1280 ... bench:       4,973 ns/iter (+/- 107)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,510 ns/iter (+/- 43)
test rgb_to_hsv_row/simd/1920 ... bench:       7,454 ns/iter (+/- 101)
test rgb_to_hsv_row/scalar/3840 ... bench:      15,378 ns/iter (+/- 67)
test rgb_to_hsv_row/simd/3840 ... bench:      15,559 ns/iter (+/- 272)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,636 ns/iter (+/- 161)
test yuv_420_to_rgb_row/simd/1280 ... bench:       4,634 ns/iter (+/- 72)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       6,962 ns/iter (+/- 237)
test yuv_420_to_rgb_row/simd/1920 ... bench:       7,029 ns/iter (+/- 38)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      13,983 ns/iter (+/- 236)
test yuv_420_to_rgb_row/simd/3840 ... bench:      13,994 ns/iter (+/- 47)

Benchmark Results for ubuntu-x86_64-sse41-max

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: sse41-max
  • Runner: GitHub Actions 1000007145
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_disable_avx512 --cfg colconv_disable_avx2
  • Date: 2026-04-18 12:27:06 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,944 ns/iter (+/- 61)
test rgb_to_hsv_row/simd/1280 ... bench:       2,755 ns/iter (+/- 164)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,413 ns/iter (+/- 521)
test rgb_to_hsv_row/simd/1920 ... bench:       4,128 ns/iter (+/- 125)
test rgb_to_hsv_row/scalar/3840 ... bench:      14,850 ns/iter (+/- 212)
test rgb_to_hsv_row/simd/3840 ... bench:       8,252 ns/iter (+/- 14)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,536 ns/iter (+/- 26)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,008 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       6,911 ns/iter (+/- 50)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,511 ns/iter (+/- 2)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      13,943 ns/iter (+/- 20)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,024 ns/iter (+/- 114)

Benchmark Results for windows-x86_64-default

System Information

  • OS: windows-latest
  • Arch: x86_64
  • SIMD tier: default
  • Runner: GitHub Actions 1000007134
  • Runner arch (GH): X64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 12:26:57 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,965 ns/iter (+/- 36)
test rgb_to_hsv_row/simd/1280 ... bench:       2,602 ns/iter (+/- 138)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,458 ns/iter (+/- 66)
test rgb_to_hsv_row/simd/1920 ... bench:       3,898 ns/iter (+/- 46)
test rgb_to_hsv_row/scalar/3840 ... bench:      15,055 ns/iter (+/- 278)
test rgb_to_hsv_row/simd/3840 ... bench:       7,795 ns/iter (+/- 28)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,564 ns/iter (+/- 42)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,013 ns/iter (+/- 15)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       6,917 ns/iter (+/- 46)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,515 ns/iter (+/- 4)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      13,811 ns/iter (+/- 64)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,025 ns/iter (+/- 14)

View detailed results

Detailed Criterion results have been uploaded as artifacts. Download them from the workflow run to view charts and detailed statistics.

@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 18, 2026

Welcome to Codecov 🎉

Once you merge this PR into your default branch, you're all set! Codecov will compare coverage reports and display results in all future pull requests.

ℹ️ You can also turn on project coverage checks and project coverage reporting on Pull Request comment

Thanks for integrating Codecov - We've got you covered ☂️

@github-actions
Copy link
Copy Markdown

Benchmark Results

Benchmark Results Summary

Date: 2026-04-18 12:50:08 UTC

Benchmark Results for macos-aarch64-neon

System Information

  • OS: macos-latest
  • Arch: aarch64
  • SIMD tier: neon
  • Runner: GitHub Actions 1000007238
  • Runner arch (GH): ARM64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 12:48:38 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       3,767 ns/iter (+/- 491)
test rgb_to_hsv_row/simd/1280 ... bench:       1,547 ns/iter (+/- 47)
test rgb_to_hsv_row/scalar/1920 ... bench:       5,666 ns/iter (+/- 905)
test rgb_to_hsv_row/simd/1920 ... bench:       2,382 ns/iter (+/- 759)
test rgb_to_hsv_row/scalar/3840 ... bench:      11,704 ns/iter (+/- 380)
test rgb_to_hsv_row/simd/3840 ... bench:       4,379 ns/iter (+/- 254)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       2,879 ns/iter (+/- 119)
test yuv_420_to_rgb_row/simd/1280 ... bench:         508 ns/iter (+/- 20)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       4,376 ns/iter (+/- 159)
test yuv_420_to_rgb_row/simd/1920 ... bench:         733 ns/iter (+/- 31)
test yuv_420_to_rgb_row/scalar/3840 ... bench:       8,685 ns/iter (+/- 298)
test yuv_420_to_rgb_row/simd/3840 ... bench:       1,519 ns/iter (+/- 183)

Benchmark Results for macos-aarch64-scalar

System Information

  • OS: macos-latest
  • Arch: aarch64
  • SIMD tier: scalar
  • Runner: GitHub Actions 1000007239
  • Runner arch (GH): ARM64
  • RUSTFLAGS: --cfg colconv_force_scalar
  • Date: 2026-04-18 12:48:41 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       3,818 ns/iter (+/- 382)
test rgb_to_hsv_row/simd/1280 ... bench:       3,949 ns/iter (+/- 745)
test rgb_to_hsv_row/scalar/1920 ... bench:       5,925 ns/iter (+/- 820)
test rgb_to_hsv_row/simd/1920 ... bench:       5,908 ns/iter (+/- 789)
test rgb_to_hsv_row/scalar/3840 ... bench:      14,604 ns/iter (+/- 3,870)
test rgb_to_hsv_row/simd/3840 ... bench:      13,003 ns/iter (+/- 2,182)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       2,929 ns/iter (+/- 526)
test yuv_420_to_rgb_row/simd/1280 ... bench:       2,909 ns/iter (+/- 362)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       4,452 ns/iter (+/- 689)
test yuv_420_to_rgb_row/simd/1920 ... bench:       4,582 ns/iter (+/- 1,175)
test yuv_420_to_rgb_row/scalar/3840 ... bench:       9,292 ns/iter (+/- 1,991)
test yuv_420_to_rgb_row/simd/3840 ... bench:       9,346 ns/iter (+/- 1,464)

Benchmark Results for ubuntu-x86_64-avx2-max

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: avx2-max
  • Runner: GitHub Actions 1000007248
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_disable_avx512
  • Date: 2026-04-18 12:48:55 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,924 ns/iter (+/- 23)
test rgb_to_hsv_row/simd/1280 ... bench:       2,792 ns/iter (+/- 48)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,398 ns/iter (+/- 317)
test rgb_to_hsv_row/simd/1920 ... bench:       4,186 ns/iter (+/- 15)
test rgb_to_hsv_row/scalar/3840 ... bench:      14,781 ns/iter (+/- 67)
test rgb_to_hsv_row/simd/3840 ... bench:       8,380 ns/iter (+/- 19)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,646 ns/iter (+/- 21)
test yuv_420_to_rgb_row/simd/1280 ... bench:         942 ns/iter (+/- 2)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,028 ns/iter (+/- 15)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,413 ns/iter (+/- 2)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,218 ns/iter (+/- 41)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,824 ns/iter (+/- 3)

Benchmark Results for ubuntu-x86_64-default

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: default
  • Runner: GitHub Actions 1000007249
  • Runner arch (GH): X64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 12:48:53 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,998 ns/iter (+/- 12)
test rgb_to_hsv_row/simd/1280 ... bench:       2,791 ns/iter (+/- 6)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,419 ns/iter (+/- 261)
test rgb_to_hsv_row/simd/1920 ... bench:       4,185 ns/iter (+/- 11)
test rgb_to_hsv_row/scalar/3840 ... bench:      14,764 ns/iter (+/- 26)
test rgb_to_hsv_row/simd/3840 ... bench:       8,369 ns/iter (+/- 15)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,646 ns/iter (+/- 114)
test yuv_420_to_rgb_row/simd/1280 ... bench:         942 ns/iter (+/- 2)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       6,938 ns/iter (+/- 33)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,417 ns/iter (+/- 4)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      13,762 ns/iter (+/- 322)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,824 ns/iter (+/- 10)

Benchmark Results for ubuntu-x86_64-native

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: native
  • Runner: GitHub Actions 1000007247
  • Runner arch (GH): X64
  • RUSTFLAGS: -C target-cpu=native
  • Date: 2026-04-18 12:49:00 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       5,669 ns/iter (+/- 18)
test rgb_to_hsv_row/simd/1280 ... bench:       2,646 ns/iter (+/- 5)
test rgb_to_hsv_row/scalar/1920 ... bench:       8,508 ns/iter (+/- 270)
test rgb_to_hsv_row/simd/1920 ... bench:       3,967 ns/iter (+/- 39)
test rgb_to_hsv_row/scalar/3840 ... bench:      17,030 ns/iter (+/- 41)
test rgb_to_hsv_row/simd/3840 ... bench:       7,937 ns/iter (+/- 149)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       5,278 ns/iter (+/- 97)
test yuv_420_to_rgb_row/simd/1280 ... bench:         910 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,888 ns/iter (+/- 118)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,367 ns/iter (+/- 14)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      15,758 ns/iter (+/- 33)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,732 ns/iter (+/- 5)

Benchmark Results for ubuntu-x86_64-scalar

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: scalar
  • Runner: GitHub Actions 1000007246
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_force_scalar
  • Date: 2026-04-18 12:48:49 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,937 ns/iter (+/- 16)
test rgb_to_hsv_row/simd/1280 ... bench:       4,938 ns/iter (+/- 25)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,409 ns/iter (+/- 282)
test rgb_to_hsv_row/simd/1920 ... bench:       7,406 ns/iter (+/- 33)
test rgb_to_hsv_row/scalar/3840 ... bench:      14,839 ns/iter (+/- 57)
test rgb_to_hsv_row/simd/3840 ... bench:      14,835 ns/iter (+/- 44)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,628 ns/iter (+/- 17)
test yuv_420_to_rgb_row/simd/1280 ... bench:       4,643 ns/iter (+/- 11)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,036 ns/iter (+/- 135)
test yuv_420_to_rgb_row/simd/1920 ... bench:       7,178 ns/iter (+/- 86)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,115 ns/iter (+/- 32)
test yuv_420_to_rgb_row/simd/3840 ... bench:      14,016 ns/iter (+/- 745)

Benchmark Results for ubuntu-x86_64-sse41-max

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: sse41-max
  • Runner: GitHub Actions 1000007251
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_disable_avx512 --cfg colconv_disable_avx2
  • Date: 2026-04-18 12:49:27 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,953 ns/iter (+/- 126)
test rgb_to_hsv_row/simd/1280 ... bench:       2,752 ns/iter (+/- 4)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,409 ns/iter (+/- 104)
test rgb_to_hsv_row/simd/1920 ... bench:       4,126 ns/iter (+/- 42)
test rgb_to_hsv_row/scalar/3840 ... bench:      14,975 ns/iter (+/- 287)
test rgb_to_hsv_row/simd/3840 ... bench:       8,251 ns/iter (+/- 24)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,581 ns/iter (+/- 33)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,012 ns/iter (+/- 7)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       6,962 ns/iter (+/- 56)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,512 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      13,942 ns/iter (+/- 45)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,025 ns/iter (+/- 3)

Benchmark Results for windows-x86_64-default

System Information

  • OS: windows-latest
  • Arch: x86_64
  • SIMD tier: default
  • Runner: GitHub Actions 1000007243
  • Runner arch (GH): X64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 12:49:40 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,963 ns/iter (+/- 62)
test rgb_to_hsv_row/simd/1280 ... bench:       2,599 ns/iter (+/- 22)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,457 ns/iter (+/- 50)
test rgb_to_hsv_row/simd/1920 ... bench:       3,939 ns/iter (+/- 175)
test rgb_to_hsv_row/scalar/3840 ... bench:      15,176 ns/iter (+/- 194)
test rgb_to_hsv_row/simd/3840 ... bench:       7,816 ns/iter (+/- 32)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,618 ns/iter (+/- 572)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,073 ns/iter (+/- 14)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       6,927 ns/iter (+/- 86)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,530 ns/iter (+/- 16)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      13,903 ns/iter (+/- 961)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,355 ns/iter (+/- 240)

View detailed results

Detailed Criterion results have been uploaded as artifacts. Download them from the workflow run to view charts and detailed statistics.

@github-actions
Copy link
Copy Markdown

Benchmark Results

Benchmark Results Summary

Date: 2026-04-18 13:01:53 UTC

Benchmark Results for macos-aarch64-neon

System Information

  • OS: macos-latest
  • Arch: aarch64
  • SIMD tier: neon
  • Runner: GitHub Actions 1000007323
  • Runner arch (GH): ARM64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 13:01:39 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       3,647 ns/iter (+/- 124)
test rgb_to_hsv_row/simd/1280 ... bench:       1,451 ns/iter (+/- 45)
test rgb_to_hsv_row/scalar/1920 ... bench:       5,463 ns/iter (+/- 93)
test rgb_to_hsv_row/simd/1920 ... bench:       2,179 ns/iter (+/- 46)
test rgb_to_hsv_row/scalar/3840 ... bench:      10,924 ns/iter (+/- 371)
test rgb_to_hsv_row/simd/3840 ... bench:       4,354 ns/iter (+/- 130)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       2,751 ns/iter (+/- 56)
test yuv_420_to_rgb_row/simd/1280 ... bench:         490 ns/iter (+/- 21)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       4,125 ns/iter (+/- 87)
test yuv_420_to_rgb_row/simd/1920 ... bench:         731 ns/iter (+/- 13)
test yuv_420_to_rgb_row/scalar/3840 ... bench:       8,423 ns/iter (+/- 113)
test yuv_420_to_rgb_row/simd/3840 ... bench:       1,462 ns/iter (+/- 29)

Benchmark Results for macos-aarch64-scalar

System Information

  • OS: macos-latest
  • Arch: aarch64
  • SIMD tier: scalar
  • Runner: GitHub Actions 1000007317
  • Runner arch (GH): ARM64
  • RUSTFLAGS: --cfg colconv_force_scalar
  • Date: 2026-04-18 13:00:30 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       3,989 ns/iter (+/- 1,352)
test rgb_to_hsv_row/simd/1280 ... bench:       3,988 ns/iter (+/- 288)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,024 ns/iter (+/- 448)
test rgb_to_hsv_row/simd/1920 ... bench:       5,965 ns/iter (+/- 364)
test rgb_to_hsv_row/scalar/3840 ... bench:      12,962 ns/iter (+/- 2,127)
test rgb_to_hsv_row/simd/3840 ... bench:      12,771 ns/iter (+/- 1,846)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       3,019 ns/iter (+/- 277)
test yuv_420_to_rgb_row/simd/1280 ... bench:       3,013 ns/iter (+/- 528)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       4,633 ns/iter (+/- 270)
test yuv_420_to_rgb_row/simd/1920 ... bench:       4,630 ns/iter (+/- 360)
test yuv_420_to_rgb_row/scalar/3840 ... bench:       9,227 ns/iter (+/- 808)
test yuv_420_to_rgb_row/simd/3840 ... bench:       9,254 ns/iter (+/- 966)

Benchmark Results for ubuntu-x86_64-avx2-max

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: avx2-max
  • Runner: GitHub Actions 1000007311
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_disable_avx512
  • Date: 2026-04-18 12:59:46 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,924 ns/iter (+/- 14)
test rgb_to_hsv_row/simd/1280 ... bench:       2,790 ns/iter (+/- 5)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,376 ns/iter (+/- 153)
test rgb_to_hsv_row/simd/1920 ... bench:       4,183 ns/iter (+/- 16)
test rgb_to_hsv_row/scalar/3840 ... bench:      14,786 ns/iter (+/- 490)
test rgb_to_hsv_row/simd/3840 ... bench:       8,366 ns/iter (+/- 15)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,639 ns/iter (+/- 46)
test yuv_420_to_rgb_row/simd/1280 ... bench:         942 ns/iter (+/- 3)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,242 ns/iter (+/- 169)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,413 ns/iter (+/- 37)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,179 ns/iter (+/- 123)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,821 ns/iter (+/- 4)

Benchmark Results for ubuntu-x86_64-default

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: default
  • Runner: GitHub Actions 1000007310
  • Runner arch (GH): X64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 12:59:43 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,662 ns/iter (+/- 16)
test rgb_to_hsv_row/simd/1280 ... bench:       3,553 ns/iter (+/- 4)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,982 ns/iter (+/- 136)
test rgb_to_hsv_row/simd/1920 ... bench:       5,326 ns/iter (+/- 25)
test rgb_to_hsv_row/scalar/3840 ... bench:      14,093 ns/iter (+/- 138)
test rgb_to_hsv_row/simd/3840 ... bench:      10,648 ns/iter (+/- 11)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       3,944 ns/iter (+/- 109)
test yuv_420_to_rgb_row/simd/1280 ... bench:         766 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       6,066 ns/iter (+/- 31)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,140 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      11,949 ns/iter (+/- 385)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,272 ns/iter (+/- 2)

Benchmark Results for ubuntu-x86_64-native

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: native
  • Runner: GitHub Actions 1000007308
  • Runner arch (GH): X64
  • RUSTFLAGS: -C target-cpu=native
  • Date: 2026-04-18 12:59:48 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       5,543 ns/iter (+/- 22)
test rgb_to_hsv_row/simd/1280 ... bench:       2,425 ns/iter (+/- 14)
test rgb_to_hsv_row/scalar/1920 ... bench:       8,310 ns/iter (+/- 50)
test rgb_to_hsv_row/simd/1920 ... bench:       3,636 ns/iter (+/- 12)
test rgb_to_hsv_row/scalar/3840 ... bench:      16,659 ns/iter (+/- 47)
test rgb_to_hsv_row/simd/3840 ... bench:       7,270 ns/iter (+/- 32)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,827 ns/iter (+/- 14)
test yuv_420_to_rgb_row/simd/1280 ... bench:         935 ns/iter (+/- 0)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,213 ns/iter (+/- 13)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,401 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,435 ns/iter (+/- 46)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,802 ns/iter (+/- 2)

Benchmark Results for ubuntu-x86_64-scalar

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: scalar
  • Runner: GitHub Actions 1000007309
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_force_scalar
  • Date: 2026-04-18 12:59:38 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,945 ns/iter (+/- 60)
test rgb_to_hsv_row/simd/1280 ... bench:       4,945 ns/iter (+/- 28)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,408 ns/iter (+/- 219)
test rgb_to_hsv_row/simd/1920 ... bench:       7,407 ns/iter (+/- 15)
test rgb_to_hsv_row/scalar/3840 ... bench:      14,836 ns/iter (+/- 152)
test rgb_to_hsv_row/simd/3840 ... bench:      14,843 ns/iter (+/- 95)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,769 ns/iter (+/- 18)
test yuv_420_to_rgb_row/simd/1280 ... bench:       4,593 ns/iter (+/- 12)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,062 ns/iter (+/- 68)
test yuv_420_to_rgb_row/simd/1920 ... bench:       7,185 ns/iter (+/- 23)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,128 ns/iter (+/- 28)
test yuv_420_to_rgb_row/simd/3840 ... bench:      14,086 ns/iter (+/- 446)

Benchmark Results for ubuntu-x86_64-sse41-max

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: sse41-max
  • Runner: GitHub Actions 1000007307
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_disable_avx512 --cfg colconv_disable_avx2
  • Date: 2026-04-18 12:59:39 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,944 ns/iter (+/- 85)
test rgb_to_hsv_row/simd/1280 ... bench:       2,751 ns/iter (+/- 4)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,428 ns/iter (+/- 384)
test rgb_to_hsv_row/simd/1920 ... bench:       4,124 ns/iter (+/- 8)
test rgb_to_hsv_row/scalar/3840 ... bench:      14,857 ns/iter (+/- 44)
test rgb_to_hsv_row/simd/3840 ... bench:       8,246 ns/iter (+/- 13)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,588 ns/iter (+/- 22)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,008 ns/iter (+/- 3)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       6,933 ns/iter (+/- 35)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,512 ns/iter (+/- 28)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      13,932 ns/iter (+/- 151)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,030 ns/iter (+/- 4)

Benchmark Results for windows-x86_64-default

System Information

  • OS: windows-latest
  • Arch: x86_64
  • SIMD tier: default
  • Runner: GitHub Actions 1000007301
  • Runner arch (GH): X64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 13:00:29 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,966 ns/iter (+/- 39)
test rgb_to_hsv_row/simd/1280 ... bench:       2,603 ns/iter (+/- 8)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,465 ns/iter (+/- 86)
test rgb_to_hsv_row/simd/1920 ... bench:       3,899 ns/iter (+/- 24)
test rgb_to_hsv_row/scalar/3840 ... bench:      15,044 ns/iter (+/- 149)
test rgb_to_hsv_row/simd/3840 ... bench:       7,795 ns/iter (+/- 25)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,562 ns/iter (+/- 24)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,013 ns/iter (+/- 4)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       6,920 ns/iter (+/- 32)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,514 ns/iter (+/- 5)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      13,811 ns/iter (+/- 64)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,024 ns/iter (+/- 16)

View detailed results

Detailed Criterion results have been uploaded as artifacts. Download them from the workflow run to view charts and detailed statistics.

@github-actions
Copy link
Copy Markdown

Benchmark Results

Benchmark Results Summary

Date: 2026-04-18 13:43:17 UTC

Benchmark Results for macos-aarch64-neon

System Information

  • OS: macos-latest
  • Arch: aarch64
  • SIMD tier: neon
  • Runner: GitHub Actions 1000007378
  • Runner arch (GH): ARM64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 13:41:44 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       3,379 ns/iter (+/- 76)
test rgb_to_hsv_row/simd/1280 ... bench:       1,569 ns/iter (+/- 26)
test rgb_to_hsv_row/scalar/1920 ... bench:       5,061 ns/iter (+/- 78)
test rgb_to_hsv_row/simd/1920 ... bench:       2,358 ns/iter (+/- 36)
test rgb_to_hsv_row/scalar/3840 ... bench:      10,208 ns/iter (+/- 679)
test rgb_to_hsv_row/simd/3840 ... bench:       4,712 ns/iter (+/- 97)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       2,915 ns/iter (+/- 45)
test yuv_420_to_rgb_row/simd/1280 ... bench:         530 ns/iter (+/- 7)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       4,370 ns/iter (+/- 71)
test yuv_420_to_rgb_row/simd/1920 ... bench:         791 ns/iter (+/- 9)
test yuv_420_to_rgb_row/scalar/3840 ... bench:       8,948 ns/iter (+/- 127)
test yuv_420_to_rgb_row/simd/3840 ... bench:       1,579 ns/iter (+/- 35)

Benchmark Results for macos-aarch64-scalar

System Information

  • OS: macos-latest
  • Arch: aarch64
  • SIMD tier: scalar
  • Runner: GitHub Actions 1000007379
  • Runner arch (GH): ARM64
  • RUSTFLAGS: --cfg colconv_force_scalar
  • Date: 2026-04-18 13:42:07 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       3,970 ns/iter (+/- 614)
test rgb_to_hsv_row/simd/1280 ... bench:       4,226 ns/iter (+/- 1,042)
test rgb_to_hsv_row/scalar/1920 ... bench:       5,087 ns/iter (+/- 298)
test rgb_to_hsv_row/simd/1920 ... bench:       5,059 ns/iter (+/- 88)
test rgb_to_hsv_row/scalar/3840 ... bench:      10,874 ns/iter (+/- 683)
test rgb_to_hsv_row/simd/3840 ... bench:      10,957 ns/iter (+/- 779)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       2,986 ns/iter (+/- 211)
test yuv_420_to_rgb_row/simd/1280 ... bench:       2,915 ns/iter (+/- 101)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       4,371 ns/iter (+/- 141)
test yuv_420_to_rgb_row/simd/1920 ... bench:       4,459 ns/iter (+/- 263)
test yuv_420_to_rgb_row/scalar/3840 ... bench:       8,932 ns/iter (+/- 527)
test yuv_420_to_rgb_row/simd/3840 ... bench:       8,946 ns/iter (+/- 443)

Benchmark Results for ubuntu-x86_64-avx2-max

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: avx2-max
  • Runner: GitHub Actions 1000007372
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_disable_avx512
  • Date: 2026-04-18 13:41:50 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,645 ns/iter (+/- 237)
test rgb_to_hsv_row/simd/1280 ... bench:       2,586 ns/iter (+/- 27)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,973 ns/iter (+/- 35)
test rgb_to_hsv_row/simd/1920 ... bench:       3,876 ns/iter (+/- 7)
test rgb_to_hsv_row/scalar/3840 ... bench:      13,944 ns/iter (+/- 23)
test rgb_to_hsv_row/simd/3840 ... bench:       7,758 ns/iter (+/- 8)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,832 ns/iter (+/- 32)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,004 ns/iter (+/- 17)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,264 ns/iter (+/- 42)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,510 ns/iter (+/- 25)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,581 ns/iter (+/- 57)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,017 ns/iter (+/- 56)

Benchmark Results for ubuntu-x86_64-default

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: default
  • Runner: GitHub Actions 1000007374
  • Runner arch (GH): X64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 13:41:53 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,647 ns/iter (+/- 126)
test rgb_to_hsv_row/simd/1280 ... bench:       2,587 ns/iter (+/- 9)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,969 ns/iter (+/- 30)
test rgb_to_hsv_row/simd/1920 ... bench:       3,885 ns/iter (+/- 35)
test rgb_to_hsv_row/scalar/3840 ... bench:      13,965 ns/iter (+/- 28)
test rgb_to_hsv_row/simd/3840 ... bench:       7,767 ns/iter (+/- 5)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,806 ns/iter (+/- 137)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,005 ns/iter (+/- 4)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,286 ns/iter (+/- 31)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,505 ns/iter (+/- 2)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,563 ns/iter (+/- 48)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,014 ns/iter (+/- 4)

Benchmark Results for ubuntu-x86_64-native

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: native
  • Runner: GitHub Actions 1000007371
  • Runner arch (GH): X64
  • RUSTFLAGS: -C target-cpu=native
  • Date: 2026-04-18 13:41:59 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       5,312 ns/iter (+/- 33)
test rgb_to_hsv_row/simd/1280 ... bench:       2,413 ns/iter (+/- 7)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,963 ns/iter (+/- 36)
test rgb_to_hsv_row/simd/1920 ... bench:       3,619 ns/iter (+/- 12)
test rgb_to_hsv_row/scalar/3840 ... bench:      15,943 ns/iter (+/- 21)
test rgb_to_hsv_row/simd/3840 ... bench:       7,235 ns/iter (+/- 10)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,846 ns/iter (+/- 11)
test yuv_420_to_rgb_row/simd/1280 ... bench:         933 ns/iter (+/- 30)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,254 ns/iter (+/- 23)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,400 ns/iter (+/- 4)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,506 ns/iter (+/- 29)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,798 ns/iter (+/- 5)

Benchmark Results for ubuntu-x86_64-scalar

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: scalar
  • Runner: GitHub Actions 1000007373
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_force_scalar
  • Date: 2026-04-18 13:41:56 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       3,446 ns/iter (+/- 85)
test rgb_to_hsv_row/simd/1280 ... bench:       3,447 ns/iter (+/- 9)
test rgb_to_hsv_row/scalar/1920 ... bench:       5,172 ns/iter (+/- 160)
test rgb_to_hsv_row/simd/1920 ... bench:       5,169 ns/iter (+/- 18)
test rgb_to_hsv_row/scalar/3840 ... bench:      10,349 ns/iter (+/- 247)
test rgb_to_hsv_row/simd/3840 ... bench:      10,348 ns/iter (+/- 15)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       3,557 ns/iter (+/- 19)
test yuv_420_to_rgb_row/simd/1280 ... bench:       3,551 ns/iter (+/- 45)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       5,355 ns/iter (+/- 55)
test yuv_420_to_rgb_row/simd/1920 ... bench:       5,411 ns/iter (+/- 123)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      10,737 ns/iter (+/- 28)
test yuv_420_to_rgb_row/simd/3840 ... bench:      10,767 ns/iter (+/- 690)

Benchmark Results for ubuntu-x86_64-sse41-max

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: sse41-max
  • Runner: GitHub Actions 1000007375
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_disable_avx512 --cfg colconv_disable_avx2
  • Date: 2026-04-18 13:41:56 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,445 ns/iter (+/- 7)
test rgb_to_hsv_row/simd/1280 ... bench:       2,751 ns/iter (+/- 3)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,663 ns/iter (+/- 212)
test rgb_to_hsv_row/simd/1920 ... bench:       5,460 ns/iter (+/- 605)
test rgb_to_hsv_row/scalar/3840 ... bench:      13,341 ns/iter (+/- 96)
test rgb_to_hsv_row/simd/3840 ... bench:       8,250 ns/iter (+/- 10)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,443 ns/iter (+/- 15)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,009 ns/iter (+/- 2)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       6,950 ns/iter (+/- 88)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,512 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      13,971 ns/iter (+/- 37)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,023 ns/iter (+/- 35)

Benchmark Results for windows-x86_64-default

System Information

  • OS: windows-latest
  • Arch: x86_64
  • SIMD tier: default
  • Runner: GitHub Actions 1000007361
  • Runner arch (GH): X64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 13:42:55 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,669 ns/iter (+/- 155)
test rgb_to_hsv_row/simd/1280 ... bench:       2,599 ns/iter (+/- 24)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,017 ns/iter (+/- 63)
test rgb_to_hsv_row/simd/1920 ... bench:       3,905 ns/iter (+/- 122)
test rgb_to_hsv_row/scalar/3840 ... bench:      14,321 ns/iter (+/- 503)
test rgb_to_hsv_row/simd/3840 ... bench:       7,827 ns/iter (+/- 105)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,858 ns/iter (+/- 99)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,020 ns/iter (+/- 9)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,297 ns/iter (+/- 68)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,528 ns/iter (+/- 21)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      15,026 ns/iter (+/- 2,154)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,045 ns/iter (+/- 133)

View detailed results

Detailed Criterion results have been uploaded as artifacts. Download them from the workflow run to view charts and detailed statistics.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 26 out of 27 changed files in this pull request and generated 7 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/sinker/mixed.rs
Comment on lines +189 to +192
// Luma — YUV420p luma *is* the Y plane. Just copy.
if let Some(luma) = luma.as_deref_mut() {
luma[idx * w..(idx + 1) * w].copy_from_slice(&row.y()[..w]);
}
Copy link

Copilot AI Apr 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

luma[idx * w..(idx + 1) * w] will panic with an unhelpful slice error if the caller’s luma buffer is too short for the incoming row index. Consider adding an explicit bounds check/assert with a clearer message (or track/validate expected height up front) to make contract violations easier to diagnose.

Copilot uses AI. Check for mistakes.
Comment thread src/sinker/mixed.rs
Comment on lines +204 to +206
let rgb_row: &mut [u8] = match rgb.as_deref_mut() {
Some(buf) => &mut buf[idx * w * 3..(idx + 1) * w * 3],
None => {
Copy link

Copilot AI Apr 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The RGB output path slices buf[idx * w * 3..(idx + 1) * w * 3] without validating the buffer length against the current row index. This will panic on short buffers and the error won’t clearly indicate which output is undersized. Consider adding an explicit assert (and possibly documenting/encoding expected height) before slicing.

Copilot uses AI. Check for mistakes.
Comment thread src/sinker/mixed.rs
Comment on lines +228 to +234
if let Some(hsv) = hsv.as_mut() {
rgb_to_hsv_row(
rgb_row,
&mut hsv.h[idx * w..(idx + 1) * w],
&mut hsv.s[idx * w..(idx + 1) * w],
&mut hsv.v[idx * w..(idx + 1) * w],
w,
Copy link

Copilot AI Apr 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

HSV output slices (hsv.h[idx * w..], etc.) also assume the caller provided >= width * height bytes per plane, but MixedSinker doesn’t validate this. Adding explicit asserts here (or validating once when the sink is configured) would provide clearer failures than a generic slice panic.

Copilot uses AI. Check for mistakes.
Comment thread Cargo.toml
Comment thread src/row/scalar.rs Outdated
Comment on lines +342 to +372
#[test]
fn yuv420_bgr_black() {
// Full-range Y=0, neutral chroma → black.
let y = [0u8; 4];
let u = [128u8; 2];
let v = [128u8; 2];
let mut rgb = [0u8; 12];
yuv_420_to_rgb_row(&y, &u, &v, &mut rgb, 4, ColorMatrix::Bt601, true);
assert!(rgb.iter().all(|&c| c == 0), "got {rgb:?}");
}

#[test]
fn yuv420_bgr_white_full_range() {
let y = [255u8; 4];
let u = [128u8; 2];
let v = [128u8; 2];
let mut rgb = [0u8; 12];
yuv_420_to_rgb_row(&y, &u, &v, &mut rgb, 4, ColorMatrix::Bt601, true);
assert!(rgb.iter().all(|&c| c == 255), "got {rgb:?}");
}

#[test]
fn yuv420_bgr_gray_is_gray() {
let y = [128u8; 4];
let u = [128u8; 2];
let v = [128u8; 2];
let mut rgb = [0u8; 12];
yuv_420_to_rgb_row(&y, &u, &v, &mut rgb, 4, ColorMatrix::Bt601, true);
for x in 0..4 {
let (b, g, r) = (rgb[x * 3], rgb[x * 3 + 1], rgb[x * 3 + 2]);
assert_eq!(b, g);
Copy link

Copilot AI Apr 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Several YUV→RGB scalar tests are named yuv420_bgr_* and destructure pixels as (b, g, r), but yuv_420_to_rgb_row is documented to output packed R,G,B. Even though many assertions pass due to grayscale inputs, the naming/order here is misleading and could mask channel-order regressions—consider renaming tests/variables to match RGB semantics.

Copilot uses AI. Check for mistakes.
Comment thread src/yuv/yuv420p.rs Outdated
Comment thread src/lib.rs Outdated
@github-actions
Copy link
Copy Markdown

Benchmark Results

Benchmark Results Summary

Date: 2026-04-18 13:48:51 UTC

Benchmark Results for macos-aarch64-neon

System Information

  • OS: macos-latest
  • Arch: aarch64
  • SIMD tier: neon
  • Runner: GitHub Actions 1000007442
  • Runner arch (GH): ARM64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 13:48:11 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       3,376 ns/iter (+/- 101)
test rgb_to_hsv_row/simd/1280 ... bench:       1,570 ns/iter (+/- 49)
test rgb_to_hsv_row/scalar/1920 ... bench:       5,413 ns/iter (+/- 580)
test rgb_to_hsv_row/simd/1920 ... bench:       2,355 ns/iter (+/- 41)
test rgb_to_hsv_row/scalar/3840 ... bench:      10,177 ns/iter (+/- 526)
test rgb_to_hsv_row/simd/3840 ... bench:       4,719 ns/iter (+/- 210)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       2,926 ns/iter (+/- 116)
test yuv_420_to_rgb_row/simd/1280 ... bench:         532 ns/iter (+/- 40)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       4,405 ns/iter (+/- 300)
test yuv_420_to_rgb_row/simd/1920 ... bench:         791 ns/iter (+/- 25)
test yuv_420_to_rgb_row/scalar/3840 ... bench:       8,983 ns/iter (+/- 318)
test yuv_420_to_rgb_row/simd/3840 ... bench:       1,578 ns/iter (+/- 117)

Benchmark Results for macos-aarch64-scalar

System Information

  • OS: macos-latest
  • Arch: aarch64
  • SIMD tier: scalar
  • Runner: GitHub Actions 1000007443
  • Runner arch (GH): ARM64
  • RUSTFLAGS: --cfg colconv_force_scalar
  • Date: 2026-04-18 13:48:04 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       3,378 ns/iter (+/- 68)
test rgb_to_hsv_row/simd/1280 ... bench:       3,382 ns/iter (+/- 85)
test rgb_to_hsv_row/scalar/1920 ... bench:       5,068 ns/iter (+/- 93)
test rgb_to_hsv_row/simd/1920 ... bench:       5,066 ns/iter (+/- 81)
test rgb_to_hsv_row/scalar/3840 ... bench:      10,149 ns/iter (+/- 462)
test rgb_to_hsv_row/simd/3840 ... bench:      10,172 ns/iter (+/- 742)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       2,914 ns/iter (+/- 110)
test yuv_420_to_rgb_row/simd/1280 ... bench:       2,911 ns/iter (+/- 59)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       4,372 ns/iter (+/- 260)
test yuv_420_to_rgb_row/simd/1920 ... bench:       4,368 ns/iter (+/- 69)
test yuv_420_to_rgb_row/scalar/3840 ... bench:       8,947 ns/iter (+/- 135)
test yuv_420_to_rgb_row/simd/3840 ... bench:       8,948 ns/iter (+/- 137)

Benchmark Results for ubuntu-x86_64-avx2-max

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: avx2-max
  • Runner: GitHub Actions 1000007436
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_disable_avx512
  • Date: 2026-04-18 13:46:58 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,648 ns/iter (+/- 55)
test rgb_to_hsv_row/simd/1280 ... bench:       2,587 ns/iter (+/- 23)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,979 ns/iter (+/- 220)
test rgb_to_hsv_row/simd/1920 ... bench:       3,878 ns/iter (+/- 15)
test rgb_to_hsv_row/scalar/3840 ... bench:      14,034 ns/iter (+/- 32)
test rgb_to_hsv_row/simd/3840 ... bench:       7,763 ns/iter (+/- 19)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,824 ns/iter (+/- 20)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,006 ns/iter (+/- 2)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,269 ns/iter (+/- 18)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,505 ns/iter (+/- 4)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,571 ns/iter (+/- 25)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,014 ns/iter (+/- 4)

Benchmark Results for ubuntu-x86_64-default

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: default
  • Runner: GitHub Actions 1000007427
  • Runner arch (GH): X64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 13:46:10 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       3,524 ns/iter (+/- 17)
test rgb_to_hsv_row/simd/1280 ... bench:       2,524 ns/iter (+/- 114)
test rgb_to_hsv_row/scalar/1920 ... bench:       5,291 ns/iter (+/- 30)
test rgb_to_hsv_row/simd/1920 ... bench:       3,758 ns/iter (+/- 155)
test rgb_to_hsv_row/scalar/3840 ... bench:      10,591 ns/iter (+/- 50)
test rgb_to_hsv_row/simd/3840 ... bench:       7,561 ns/iter (+/- 303)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       3,687 ns/iter (+/- 66)
test yuv_420_to_rgb_row/simd/1280 ... bench:         797 ns/iter (+/- 16)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       5,704 ns/iter (+/- 41)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,194 ns/iter (+/- 2)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      11,235 ns/iter (+/- 420)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,384 ns/iter (+/- 1)

Benchmark Results for ubuntu-x86_64-native

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: native
  • Runner: GitHub Actions 1000007440
  • Runner arch (GH): X64
  • RUSTFLAGS: -C target-cpu=native
  • Date: 2026-04-18 13:47:37 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       5,311 ns/iter (+/- 10)
test rgb_to_hsv_row/simd/1280 ... bench:       2,414 ns/iter (+/- 4)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,959 ns/iter (+/- 346)
test rgb_to_hsv_row/simd/1920 ... bench:       3,616 ns/iter (+/- 38)
test rgb_to_hsv_row/scalar/3840 ... bench:      15,946 ns/iter (+/- 49)
test rgb_to_hsv_row/simd/3840 ... bench:       7,232 ns/iter (+/- 18)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,846 ns/iter (+/- 150)
test yuv_420_to_rgb_row/simd/1280 ... bench:         934 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,256 ns/iter (+/- 10)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,400 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,659 ns/iter (+/- 19)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,805 ns/iter (+/- 3)

Benchmark Results for ubuntu-x86_64-scalar

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: scalar
  • Runner: GitHub Actions 1000007428
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_force_scalar
  • Date: 2026-04-18 13:46:18 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       3,448 ns/iter (+/- 19)
test rgb_to_hsv_row/simd/1280 ... bench:       3,449 ns/iter (+/- 16)
test rgb_to_hsv_row/scalar/1920 ... bench:       5,167 ns/iter (+/- 39)
test rgb_to_hsv_row/simd/1920 ... bench:       5,167 ns/iter (+/- 14)
test rgb_to_hsv_row/scalar/3840 ... bench:      10,351 ns/iter (+/- 33)
test rgb_to_hsv_row/simd/3840 ... bench:      10,351 ns/iter (+/- 20)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       3,537 ns/iter (+/- 44)
test yuv_420_to_rgb_row/simd/1280 ... bench:       3,565 ns/iter (+/- 20)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       5,366 ns/iter (+/- 41)
test yuv_420_to_rgb_row/simd/1920 ... bench:       5,418 ns/iter (+/- 14)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      10,765 ns/iter (+/- 68)
test yuv_420_to_rgb_row/simd/3840 ... bench:      10,753 ns/iter (+/- 151)

Benchmark Results for ubuntu-x86_64-sse41-max

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: sse41-max
  • Runner: GitHub Actions 1000007446
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_disable_avx512 --cfg colconv_disable_avx2
  • Date: 2026-04-18 13:48:38 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,787 ns/iter (+/- 64)
test rgb_to_hsv_row/simd/1280 ... bench:       2,563 ns/iter (+/- 4)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,935 ns/iter (+/- 22)
test rgb_to_hsv_row/simd/1920 ... bench:       3,862 ns/iter (+/- 20)
test rgb_to_hsv_row/scalar/3840 ... bench:      13,947 ns/iter (+/- 354)
test rgb_to_hsv_row/simd/3840 ... bench:       7,705 ns/iter (+/- 15)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,552 ns/iter (+/- 8)
test yuv_420_to_rgb_row/simd/1280 ... bench:         904 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       6,880 ns/iter (+/- 16)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,360 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      13,746 ns/iter (+/- 38)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,712 ns/iter (+/- 4)

Benchmark Results for windows-x86_64-default

System Information

  • OS: windows-latest
  • Arch: x86_64
  • SIMD tier: default
  • Runner: GitHub Actions 1000007437
  • Runner arch (GH): X64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 13:48:00 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,662 ns/iter (+/- 41)
test rgb_to_hsv_row/simd/1280 ... bench:       2,600 ns/iter (+/- 26)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,006 ns/iter (+/- 138)
test rgb_to_hsv_row/simd/1920 ... bench:       3,896 ns/iter (+/- 15)
test rgb_to_hsv_row/scalar/3840 ... bench:      14,302 ns/iter (+/- 226)
test rgb_to_hsv_row/simd/3840 ... bench:       7,797 ns/iter (+/- 28)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,819 ns/iter (+/- 25)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,014 ns/iter (+/- 12)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,274 ns/iter (+/- 67)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,515 ns/iter (+/- 6)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,544 ns/iter (+/- 69)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,027 ns/iter (+/- 18)

View detailed results

Detailed Criterion results have been uploaded as artifacts. Download them from the workflow run to view charts and detailed statistics.

uqio and others added 2 commits April 19, 2026 01:55
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@github-actions
Copy link
Copy Markdown

Benchmark Results

Benchmark Results Summary

Date: 2026-04-18 14:01:04 UTC

Benchmark Results for macos-aarch64-neon

System Information

  • OS: macos-latest
  • Arch: aarch64
  • SIMD tier: neon
  • Runner: GitHub Actions 1000007525
  • Runner arch (GH): ARM64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 14:00:47 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       3,126 ns/iter (+/- 133)
test rgb_to_hsv_row/simd/1280 ... bench:       1,509 ns/iter (+/- 125)
test rgb_to_hsv_row/scalar/1920 ... bench:       4,691 ns/iter (+/- 151)
test rgb_to_hsv_row/simd/1920 ... bench:       2,189 ns/iter (+/- 102)
test rgb_to_hsv_row/scalar/3840 ... bench:      10,082 ns/iter (+/- 963)
test rgb_to_hsv_row/simd/3840 ... bench:       5,000 ns/iter (+/- 758)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       2,863 ns/iter (+/- 97)
test yuv_420_to_rgb_row/simd/1280 ... bench:         527 ns/iter (+/- 23)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       4,350 ns/iter (+/- 301)
test yuv_420_to_rgb_row/simd/1920 ... bench:         792 ns/iter (+/- 76)
test yuv_420_to_rgb_row/scalar/3840 ... bench:       8,917 ns/iter (+/- 797)
test yuv_420_to_rgb_row/simd/3840 ... bench:       1,570 ns/iter (+/- 99)

Benchmark Results for macos-aarch64-scalar

System Information

  • OS: macos-latest
  • Arch: aarch64
  • SIMD tier: scalar
  • Runner: GitHub Actions 1000007505
  • Runner arch (GH): ARM64
  • RUSTFLAGS: --cfg colconv_force_scalar
  • Date: 2026-04-18 13:58:41 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       3,385 ns/iter (+/- 87)
test rgb_to_hsv_row/simd/1280 ... bench:       3,387 ns/iter (+/- 69)
test rgb_to_hsv_row/scalar/1920 ... bench:       5,066 ns/iter (+/- 105)
test rgb_to_hsv_row/simd/1920 ... bench:       5,066 ns/iter (+/- 181)
test rgb_to_hsv_row/scalar/3840 ... bench:      10,174 ns/iter (+/- 273)
test rgb_to_hsv_row/simd/3840 ... bench:      10,175 ns/iter (+/- 338)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       2,916 ns/iter (+/- 50)
test yuv_420_to_rgb_row/simd/1280 ... bench:       2,918 ns/iter (+/- 86)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       4,483 ns/iter (+/- 250)
test yuv_420_to_rgb_row/simd/1920 ... bench:       4,678 ns/iter (+/- 183)
test yuv_420_to_rgb_row/scalar/3840 ... bench:       9,228 ns/iter (+/- 546)
test yuv_420_to_rgb_row/simd/3840 ... bench:       9,325 ns/iter (+/- 511)

Benchmark Results for ubuntu-x86_64-avx2-max

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: avx2-max
  • Runner: GitHub Actions 1000007501
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_disable_avx512
  • Date: 2026-04-18 13:58:05 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,674 ns/iter (+/- 236)
test rgb_to_hsv_row/simd/1280 ... bench:       2,586 ns/iter (+/- 49)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,970 ns/iter (+/- 245)
test rgb_to_hsv_row/simd/1920 ... bench:       3,878 ns/iter (+/- 60)
test rgb_to_hsv_row/scalar/3840 ... bench:      13,944 ns/iter (+/- 29)
test rgb_to_hsv_row/simd/3840 ... bench:       7,759 ns/iter (+/- 10)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,830 ns/iter (+/- 18)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,004 ns/iter (+/- 5)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,268 ns/iter (+/- 22)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,505 ns/iter (+/- 2)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,576 ns/iter (+/- 40)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,012 ns/iter (+/- 3)

Benchmark Results for ubuntu-x86_64-default

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: default
  • Runner: GitHub Actions 1000007503
  • Runner arch (GH): X64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 13:58:15 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,649 ns/iter (+/- 51)
test rgb_to_hsv_row/simd/1280 ... bench:       2,587 ns/iter (+/- 5)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,982 ns/iter (+/- 373)
test rgb_to_hsv_row/simd/1920 ... bench:       3,881 ns/iter (+/- 4)
test rgb_to_hsv_row/scalar/3840 ... bench:      14,046 ns/iter (+/- 88)
test rgb_to_hsv_row/simd/3840 ... bench:       7,764 ns/iter (+/- 28)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,811 ns/iter (+/- 24)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,004 ns/iter (+/- 6)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,244 ns/iter (+/- 26)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,506 ns/iter (+/- 15)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,551 ns/iter (+/- 41)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,013 ns/iter (+/- 13)

Benchmark Results for ubuntu-x86_64-native

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: native
  • Runner: GitHub Actions 1000007517
  • Runner arch (GH): X64
  • RUSTFLAGS: -C target-cpu=native
  • Date: 2026-04-18 13:59:29 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       5,309 ns/iter (+/- 38)
test rgb_to_hsv_row/simd/1280 ... bench:       2,411 ns/iter (+/- 15)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,972 ns/iter (+/- 450)
test rgb_to_hsv_row/simd/1920 ... bench:       3,615 ns/iter (+/- 6)
test rgb_to_hsv_row/scalar/3840 ... bench:      15,938 ns/iter (+/- 26)
test rgb_to_hsv_row/simd/3840 ... bench:       7,227 ns/iter (+/- 19)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,846 ns/iter (+/- 9)
test yuv_420_to_rgb_row/simd/1280 ... bench:         933 ns/iter (+/- 2)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,259 ns/iter (+/- 31)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,399 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,494 ns/iter (+/- 41)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,797 ns/iter (+/- 7)

Benchmark Results for ubuntu-x86_64-scalar

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: scalar
  • Runner: GitHub Actions 1000007515
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_force_scalar
  • Date: 2026-04-18 13:59:22 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,619 ns/iter (+/- 24)
test rgb_to_hsv_row/simd/1280 ... bench:       4,620 ns/iter (+/- 36)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,925 ns/iter (+/- 99)
test rgb_to_hsv_row/simd/1920 ... bench:       6,922 ns/iter (+/- 24)
test rgb_to_hsv_row/scalar/3840 ... bench:      13,954 ns/iter (+/- 85)
test rgb_to_hsv_row/simd/3840 ... bench:      13,900 ns/iter (+/- 1,049)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,565 ns/iter (+/- 15)
test yuv_420_to_rgb_row/simd/1280 ... bench:       4,574 ns/iter (+/- 11)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       6,928 ns/iter (+/- 18)
test yuv_420_to_rgb_row/simd/1920 ... bench:       6,925 ns/iter (+/- 350)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      13,780 ns/iter (+/- 37)
test yuv_420_to_rgb_row/simd/3840 ... bench:      13,785 ns/iter (+/- 21)

Benchmark Results for ubuntu-x86_64-sse41-max

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: sse41-max
  • Runner: GitHub Actions 1000007504
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_disable_avx512 --cfg colconv_disable_avx2
  • Date: 2026-04-18 13:58:23 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,622 ns/iter (+/- 8)
test rgb_to_hsv_row/simd/1280 ... bench:       2,563 ns/iter (+/- 8)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,936 ns/iter (+/- 64)
test rgb_to_hsv_row/simd/1920 ... bench:       3,849 ns/iter (+/- 108)
test rgb_to_hsv_row/scalar/3840 ... bench:      13,957 ns/iter (+/- 126)
test rgb_to_hsv_row/simd/3840 ... bench:       7,691 ns/iter (+/- 25)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,579 ns/iter (+/- 42)
test yuv_420_to_rgb_row/simd/1280 ... bench:         904 ns/iter (+/- 2)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       6,881 ns/iter (+/- 19)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,360 ns/iter (+/- 2)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      13,772 ns/iter (+/- 29)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,712 ns/iter (+/- 3)

Benchmark Results for windows-x86_64-default

System Information

  • OS: windows-latest
  • Arch: x86_64
  • SIMD tier: default
  • Runner: GitHub Actions 1000007514
  • Runner arch (GH): X64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 14:00:39 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,669 ns/iter (+/- 97)
test rgb_to_hsv_row/simd/1280 ... bench:       2,598 ns/iter (+/- 6)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,089 ns/iter (+/- 651)
test rgb_to_hsv_row/simd/1920 ... bench:       3,898 ns/iter (+/- 20)
test rgb_to_hsv_row/scalar/3840 ... bench:      14,246 ns/iter (+/- 252)
test rgb_to_hsv_row/simd/3840 ... bench:       7,799 ns/iter (+/- 36)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,811 ns/iter (+/- 49)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,013 ns/iter (+/- 7)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,271 ns/iter (+/- 182)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,520 ns/iter (+/- 15)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,549 ns/iter (+/- 800)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,026 ns/iter (+/- 21)

View detailed results

Detailed Criterion results have been uploaded as artifacts. Download them from the workflow run to view charts and detailed statistics.

@github-actions
Copy link
Copy Markdown

Benchmark Results

Benchmark Results Summary

Date: 2026-04-18 14:03:13 UTC

Benchmark Results for macos-aarch64-neon

System Information

  • OS: macos-latest
  • Arch: aarch64
  • SIMD tier: neon
  • Runner: GitHub Actions 1000007528
  • Runner arch (GH): ARM64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 14:01:24 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       3,455 ns/iter (+/- 602)
test rgb_to_hsv_row/simd/1280 ... bench:       1,803 ns/iter (+/- 468)
test rgb_to_hsv_row/scalar/1920 ... bench:       5,643 ns/iter (+/- 2,866)
test rgb_to_hsv_row/simd/1920 ... bench:       3,575 ns/iter (+/- 767)
test rgb_to_hsv_row/scalar/3840 ... bench:      11,723 ns/iter (+/- 3,566)
test rgb_to_hsv_row/simd/3840 ... bench:       5,315 ns/iter (+/- 1,394)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       3,949 ns/iter (+/- 1,239)
test yuv_420_to_rgb_row/simd/1280 ... bench:         585 ns/iter (+/- 100)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       4,906 ns/iter (+/- 1,141)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,013 ns/iter (+/- 380)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      12,318 ns/iter (+/- 1,995)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,024 ns/iter (+/- 426)

Benchmark Results for macos-aarch64-scalar

System Information

  • OS: macos-latest
  • Arch: aarch64
  • SIMD tier: scalar
  • Runner: GitHub Actions 1000007533
  • Runner arch (GH): ARM64
  • RUSTFLAGS: --cfg colconv_force_scalar
  • Date: 2026-04-18 14:01:58 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       3,302 ns/iter (+/- 142)
test rgb_to_hsv_row/simd/1280 ... bench:       3,134 ns/iter (+/- 89)
test rgb_to_hsv_row/scalar/1920 ... bench:       4,737 ns/iter (+/- 124)
test rgb_to_hsv_row/simd/1920 ... bench:       4,704 ns/iter (+/- 218)
test rgb_to_hsv_row/scalar/3840 ... bench:       9,403 ns/iter (+/- 585)
test rgb_to_hsv_row/simd/3840 ... bench:       9,371 ns/iter (+/- 411)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       2,694 ns/iter (+/- 45)
test yuv_420_to_rgb_row/simd/1280 ... bench:       2,696 ns/iter (+/- 52)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       4,037 ns/iter (+/- 64)
test yuv_420_to_rgb_row/simd/1920 ... bench:       4,340 ns/iter (+/- 165)
test yuv_420_to_rgb_row/scalar/3840 ... bench:       8,274 ns/iter (+/- 301)
test yuv_420_to_rgb_row/simd/3840 ... bench:       8,262 ns/iter (+/- 129)

Benchmark Results for ubuntu-x86_64-avx2-max

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: avx2-max
  • Runner: GitHub Actions 1000007521
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_disable_avx512
  • Date: 2026-04-18 14:00:06 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,645 ns/iter (+/- 234)
test rgb_to_hsv_row/simd/1280 ... bench:       2,584 ns/iter (+/- 26)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,969 ns/iter (+/- 614)
test rgb_to_hsv_row/simd/1920 ... bench:       3,879 ns/iter (+/- 12)
test rgb_to_hsv_row/scalar/3840 ... bench:      13,972 ns/iter (+/- 175)
test rgb_to_hsv_row/simd/3840 ... bench:       7,764 ns/iter (+/- 21)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,817 ns/iter (+/- 19)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,004 ns/iter (+/- 3)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,263 ns/iter (+/- 14)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,505 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,567 ns/iter (+/- 125)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,012 ns/iter (+/- 9)

Benchmark Results for ubuntu-x86_64-default

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: default
  • Runner: GitHub Actions 1000007535
  • Runner arch (GH): X64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 14:02:16 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,650 ns/iter (+/- 37)
test rgb_to_hsv_row/simd/1280 ... bench:       2,587 ns/iter (+/- 4)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,966 ns/iter (+/- 451)
test rgb_to_hsv_row/simd/1920 ... bench:       3,879 ns/iter (+/- 35)
test rgb_to_hsv_row/scalar/3840 ... bench:      14,021 ns/iter (+/- 93)
test rgb_to_hsv_row/simd/3840 ... bench:       7,773 ns/iter (+/- 33)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,802 ns/iter (+/- 22)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,004 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,271 ns/iter (+/- 37)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,505 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,561 ns/iter (+/- 26)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,011 ns/iter (+/- 6)

Benchmark Results for ubuntu-x86_64-native

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: native
  • Runner: GitHub Actions 1000007537
  • Runner arch (GH): X64
  • RUSTFLAGS: -C target-cpu=native
  • Date: 2026-04-18 14:02:40 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       5,460 ns/iter (+/- 13)
test rgb_to_hsv_row/simd/1280 ... bench:       2,637 ns/iter (+/- 3)
test rgb_to_hsv_row/scalar/1920 ... bench:       8,180 ns/iter (+/- 59)
test rgb_to_hsv_row/simd/1920 ... bench:       3,955 ns/iter (+/- 20)
test rgb_to_hsv_row/scalar/3840 ... bench:      16,399 ns/iter (+/- 404)
test rgb_to_hsv_row/simd/3840 ... bench:       7,908 ns/iter (+/- 12)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       5,427 ns/iter (+/- 151)
test yuv_420_to_rgb_row/simd/1280 ... bench:         914 ns/iter (+/- 3)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       8,126 ns/iter (+/- 136)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,365 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      16,226 ns/iter (+/- 23)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,731 ns/iter (+/- 24)

Benchmark Results for ubuntu-x86_64-scalar

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: scalar
  • Runner: GitHub Actions 1000007529
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_force_scalar
  • Date: 2026-04-18 14:01:17 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,444 ns/iter (+/- 61)
test rgb_to_hsv_row/simd/1280 ... bench:       4,444 ns/iter (+/- 14)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,663 ns/iter (+/- 76)
test rgb_to_hsv_row/simd/1920 ... bench:       6,660 ns/iter (+/- 11)
test rgb_to_hsv_row/scalar/3840 ... bench:      13,346 ns/iter (+/- 24)
test rgb_to_hsv_row/simd/3840 ... bench:      13,346 ns/iter (+/- 112)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,563 ns/iter (+/- 41)
test yuv_420_to_rgb_row/simd/1280 ... bench:       4,543 ns/iter (+/- 21)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       6,957 ns/iter (+/- 13)
test yuv_420_to_rgb_row/simd/1920 ... bench:       6,940 ns/iter (+/- 24)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      13,773 ns/iter (+/- 62)
test yuv_420_to_rgb_row/simd/3840 ... bench:      13,931 ns/iter (+/- 41)

Benchmark Results for ubuntu-x86_64-sse41-max

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: sse41-max
  • Runner: GitHub Actions 1000007536
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_disable_avx512 --cfg colconv_disable_avx2
  • Date: 2026-04-18 14:02:16 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       3,447 ns/iter (+/- 8)
test rgb_to_hsv_row/simd/1280 ... bench:       2,201 ns/iter (+/- 3)
test rgb_to_hsv_row/scalar/1920 ... bench:       5,171 ns/iter (+/- 74)
test rgb_to_hsv_row/simd/1920 ... bench:       3,298 ns/iter (+/- 4)
test rgb_to_hsv_row/scalar/3840 ... bench:      10,343 ns/iter (+/- 945)
test rgb_to_hsv_row/simd/3840 ... bench:       6,596 ns/iter (+/- 16)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       3,476 ns/iter (+/- 41)
test yuv_420_to_rgb_row/simd/1280 ... bench:         783 ns/iter (+/- 4)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       5,280 ns/iter (+/- 71)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,173 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      10,732 ns/iter (+/- 71)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,345 ns/iter (+/- 1)

Benchmark Results for windows-x86_64-default

System Information

  • OS: windows-latest
  • Arch: x86_64
  • SIMD tier: default
  • Runner: GitHub Actions 1000007532
  • Runner arch (GH): X64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 14:02:31 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,663 ns/iter (+/- 22)
test rgb_to_hsv_row/simd/1280 ... bench:       2,600 ns/iter (+/- 16)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,008 ns/iter (+/- 132)
test rgb_to_hsv_row/simd/1920 ... bench:       3,898 ns/iter (+/- 22)
test rgb_to_hsv_row/scalar/3840 ... bench:      14,270 ns/iter (+/- 302)
test rgb_to_hsv_row/simd/3840 ... bench:       7,797 ns/iter (+/- 28)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,835 ns/iter (+/- 111)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,013 ns/iter (+/- 2)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,274 ns/iter (+/- 38)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,515 ns/iter (+/- 5)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,554 ns/iter (+/- 132)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,025 ns/iter (+/- 11)

View detailed results

Detailed Criterion results have been uploaded as artifacts. Download them from the workflow run to view charts and detailed statistics.

@github-actions
Copy link
Copy Markdown

Benchmark Results

Benchmark Results Summary

Date: 2026-04-18 14:10:03 UTC

Benchmark Results for macos-aarch64-neon

System Information

  • OS: macos-latest
  • Arch: aarch64
  • SIMD tier: neon
  • Runner: GitHub Actions 1000007620
  • Runner arch (GH): ARM64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 14:07:49 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       3,821 ns/iter (+/- 969)
test rgb_to_hsv_row/simd/1280 ... bench:       1,991 ns/iter (+/- 439)
test rgb_to_hsv_row/scalar/1920 ... bench:       5,799 ns/iter (+/- 1,088)
test rgb_to_hsv_row/simd/1920 ... bench:       2,609 ns/iter (+/- 356)
test rgb_to_hsv_row/scalar/3840 ... bench:      12,463 ns/iter (+/- 3,205)
test rgb_to_hsv_row/simd/3840 ... bench:       5,293 ns/iter (+/- 833)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       3,240 ns/iter (+/- 635)
test yuv_420_to_rgb_row/simd/1280 ... bench:         615 ns/iter (+/- 145)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       5,259 ns/iter (+/- 912)
test yuv_420_to_rgb_row/simd/1920 ... bench:         966 ns/iter (+/- 158)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      11,265 ns/iter (+/- 2,472)
test yuv_420_to_rgb_row/simd/3840 ... bench:       1,844 ns/iter (+/- 378)

Benchmark Results for macos-aarch64-scalar

System Information

  • OS: macos-latest
  • Arch: aarch64
  • SIMD tier: scalar
  • Runner: GitHub Actions 1000007622
  • Runner arch (GH): ARM64
  • RUSTFLAGS: --cfg colconv_force_scalar
  • Date: 2026-04-18 14:08:23 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       3,423 ns/iter (+/- 129)
test rgb_to_hsv_row/simd/1280 ... bench:       3,433 ns/iter (+/- 423)
test rgb_to_hsv_row/scalar/1920 ... bench:       5,140 ns/iter (+/- 803)
test rgb_to_hsv_row/simd/1920 ... bench:       5,165 ns/iter (+/- 587)
test rgb_to_hsv_row/scalar/3840 ... bench:      10,384 ns/iter (+/- 3,645)
test rgb_to_hsv_row/simd/3840 ... bench:      10,559 ns/iter (+/- 961)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       2,957 ns/iter (+/- 384)
test yuv_420_to_rgb_row/simd/1280 ... bench:       2,946 ns/iter (+/- 289)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       4,375 ns/iter (+/- 126)
test yuv_420_to_rgb_row/simd/1920 ... bench:       4,403 ns/iter (+/- 856)
test yuv_420_to_rgb_row/scalar/3840 ... bench:       9,053 ns/iter (+/- 1,293)
test yuv_420_to_rgb_row/simd/3840 ... bench:       9,061 ns/iter (+/- 912)

Benchmark Results for ubuntu-x86_64-avx2-max

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: avx2-max
  • Runner: GitHub Actions 1000007616
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_disable_avx512
  • Date: 2026-04-18 14:07:33 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,650 ns/iter (+/- 45)
test rgb_to_hsv_row/simd/1280 ... bench:       2,586 ns/iter (+/- 17)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,971 ns/iter (+/- 180)
test rgb_to_hsv_row/simd/1920 ... bench:       3,882 ns/iter (+/- 156)
test rgb_to_hsv_row/scalar/3840 ... bench:      14,036 ns/iter (+/- 148)
test rgb_to_hsv_row/simd/3840 ... bench:       7,761 ns/iter (+/- 19)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,828 ns/iter (+/- 25)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,003 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,271 ns/iter (+/- 70)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,504 ns/iter (+/- 2)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,557 ns/iter (+/- 61)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,010 ns/iter (+/- 13)

Benchmark Results for ubuntu-x86_64-default

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: default
  • Runner: GitHub Actions 1000007621
  • Runner arch (GH): X64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 14:07:57 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,300 ns/iter (+/- 31)
test rgb_to_hsv_row/simd/1280 ... bench:       3,551 ns/iter (+/- 49)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,435 ns/iter (+/- 40)
test rgb_to_hsv_row/simd/1920 ... bench:       5,323 ns/iter (+/- 5)
test rgb_to_hsv_row/scalar/3840 ... bench:      13,476 ns/iter (+/- 223)
test rgb_to_hsv_row/simd/3840 ... bench:      10,648 ns/iter (+/- 23)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       3,842 ns/iter (+/- 12)
test yuv_420_to_rgb_row/simd/1280 ... bench:         767 ns/iter (+/- 0)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       5,794 ns/iter (+/- 23)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,153 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      12,759 ns/iter (+/- 379)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,284 ns/iter (+/- 3)

Benchmark Results for ubuntu-x86_64-native

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: native
  • Runner: GitHub Actions 1000007615
  • Runner arch (GH): X64
  • RUSTFLAGS: -C target-cpu=native
  • Date: 2026-04-18 14:07:38 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       5,308 ns/iter (+/- 22)
test rgb_to_hsv_row/simd/1280 ... bench:       2,411 ns/iter (+/- 13)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,968 ns/iter (+/- 414)
test rgb_to_hsv_row/simd/1920 ... bench:       3,615 ns/iter (+/- 7)
test rgb_to_hsv_row/scalar/3840 ... bench:      15,932 ns/iter (+/- 867)
test rgb_to_hsv_row/simd/3840 ... bench:       7,229 ns/iter (+/- 222)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,846 ns/iter (+/- 12)
test yuv_420_to_rgb_row/simd/1280 ... bench:         933 ns/iter (+/- 3)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,258 ns/iter (+/- 21)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,399 ns/iter (+/- 4)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,529 ns/iter (+/- 22)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,801 ns/iter (+/- 6)

Benchmark Results for ubuntu-x86_64-scalar

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: scalar
  • Runner: GitHub Actions 1000007629
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_force_scalar
  • Date: 2026-04-18 14:09:46 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,143 ns/iter (+/- 56)
test rgb_to_hsv_row/simd/1280 ... bench:       4,143 ns/iter (+/- 16)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,218 ns/iter (+/- 689)
test rgb_to_hsv_row/simd/1920 ... bench:       6,219 ns/iter (+/- 36)
test rgb_to_hsv_row/scalar/3840 ... bench:      12,631 ns/iter (+/- 86)
test rgb_to_hsv_row/simd/3840 ... bench:      12,628 ns/iter (+/- 95)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       3,732 ns/iter (+/- 17)
test yuv_420_to_rgb_row/simd/1280 ... bench:       3,757 ns/iter (+/- 39)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       5,651 ns/iter (+/- 47)
test yuv_420_to_rgb_row/simd/1920 ... bench:       5,617 ns/iter (+/- 114)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      11,214 ns/iter (+/- 192)
test yuv_420_to_rgb_row/simd/3840 ... bench:      11,508 ns/iter (+/- 493)

Benchmark Results for ubuntu-x86_64-sse41-max

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: sse41-max
  • Runner: GitHub Actions 1000007614
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_disable_avx512 --cfg colconv_disable_avx2
  • Date: 2026-04-18 14:07:38 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,443 ns/iter (+/- 16)
test rgb_to_hsv_row/simd/1280 ... bench:       2,751 ns/iter (+/- 5)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,663 ns/iter (+/- 29)
test rgb_to_hsv_row/simd/1920 ... bench:       4,126 ns/iter (+/- 9)
test rgb_to_hsv_row/scalar/3840 ... bench:      13,359 ns/iter (+/- 276)
test rgb_to_hsv_row/simd/3840 ... bench:       8,248 ns/iter (+/- 231)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,552 ns/iter (+/- 15)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,009 ns/iter (+/- 2)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       6,843 ns/iter (+/- 305)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,512 ns/iter (+/- 2)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,073 ns/iter (+/- 49)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,023 ns/iter (+/- 33)

Benchmark Results for windows-x86_64-default

System Information

  • OS: windows-latest
  • Arch: x86_64
  • SIMD tier: default
  • Runner: GitHub Actions 1000007606
  • Runner arch (GH): X64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 14:08:52 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,717 ns/iter (+/- 208)
test rgb_to_hsv_row/simd/1280 ... bench:       2,608 ns/iter (+/- 501)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,061 ns/iter (+/- 84)
test rgb_to_hsv_row/simd/1920 ... bench:       3,912 ns/iter (+/- 176)
test rgb_to_hsv_row/scalar/3840 ... bench:      14,281 ns/iter (+/- 1,382)
test rgb_to_hsv_row/simd/3840 ... bench:       7,964 ns/iter (+/- 390)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       5,297 ns/iter (+/- 833)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,033 ns/iter (+/- 21)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,577 ns/iter (+/- 1,174)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,521 ns/iter (+/- 13)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,566 ns/iter (+/- 263)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,036 ns/iter (+/- 186)

View detailed results

Detailed Criterion results have been uploaded as artifacts. Download them from the workflow run to view charts and detailed statistics.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 26 out of 27 changed files in this pull request and generated 6 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/lib.rs Outdated
Comment thread src/row/arch/neon.rs Outdated
Comment thread src/row/arch/x86_avx2.rs Outdated
Comment thread src/row/arch/x86_sse41.rs Outdated
Comment thread src/row/arch/x86_avx512.rs Outdated
Comment thread src/lib.rs
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 26 out of 27 changed files in this pull request and generated 2 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/row/arch/neon.rs
Comment on lines +282 to +286
/// Bit‑identical to the scalar reference. Every scalar op has the
/// same SIMD counterpart in the same order: `vmaxq_f32` / `vminq_f32`
/// mirror `f32::max` / `f32::min`; `vdivq_f32` is true f32 division
/// (not reciprocal estimate); branch cascade uses `vbslq_f32` in the
/// same `delta == 0 → v == r → v == g → v == b` priority.
Copy link

Copilot AI Apr 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The docstring for rgb_to_hsv_row claims the NEON path is “byte‑identical” / “Bit‑identical” to scalar::rgb_to_hsv_row, but the NEON test suite below explicitly documents and tolerates ±1 LSB differences (and circular hue distance). Please align this API documentation with the actual numerical contract (e.g., “matches within ±1 LSB” and note the hue wrap behavior).

Suggested change
/// Bit‑identical to the scalar reference. Every scalar op has the
/// same SIMD counterpart in the same order: `vmaxq_f32` / `vminq_f32`
/// mirror `f32::max` / `f32::min`; `vdivq_f32` is true f32 division
/// (not reciprocal estimate); branch cascade uses `vbslq_f32` in the
/// same `delta == 0 → v == r → v == g → v == b` priority.
/// Numerically matches the scalar reference within the tolerance
/// accepted by the NEON equivalence tests, rather than bit‑identically
/// for every lane. In particular, `S` and `V` may differ by up to
/// ±1 LSB, and `H` is compared with circular wraparound semantics, so
/// values that differ by 1 across the 0/255 boundary are equivalent.
/// The SIMD path still mirrors the scalar algorithm closely:
/// `vmaxq_f32` / `vminq_f32` mirror `f32::max` / `f32::min`;
/// `vdivq_f32` is true f32 division (not a reciprocal estimate); and
/// the branch cascade uses `vbslq_f32` in the same
/// `delta == 0 → v == r → v == g → v == b` priority.

Copilot uses AI. Check for mistakes.
Comment thread src/frame.rs
Comment on lines +44 to +69
// The 3-plane × (slice, stride, dim) shape is intrinsic to YUV 4:2:0;
// `div_ceil` on u32 isn't const-stable yet, so the `(x + 1) / 2`
// idiom stays.
#[allow(clippy::too_many_arguments)]
pub const fn try_new(
y: &'a [u8],
u: &'a [u8],
v: &'a [u8],
width: u32,
height: u32,
y_stride: u32,
u_stride: u32,
v_stride: u32,
) -> Result<Self, Yuv420pFrameError> {
if width == 0 || height == 0 {
return Err(Yuv420pFrameError::ZeroDimension { width, height });
}
if width & 1 != 0 || height & 1 != 0 {
return Err(Yuv420pFrameError::OddDimension { width, height });
}
if y_stride < width {
return Err(Yuv420pFrameError::YStrideTooSmall { width, y_stride });
}
let chroma_width = width.div_ceil(2);
if u_stride < chroma_width {
return Err(Yuv420pFrameError::UStrideTooSmall {
Copy link

Copilot AI Apr 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

try_new is a const fn, but the comment says div_ceil “isn't const-stable yet” while the code calls width.div_ceil(2) / height.div_ceil(2). If div_ceil is indeed not const-stable on the crate MSRV, this won’t compile; if it is const-stable now, the comment is misleading. Since width/height are already validated even, consider replacing these with width / 2 and height / 2 (or (x + 1) / 2 if you want to support odd sizes later) and update/remove the comment accordingly.

Copilot uses AI. Check for mistakes.
@github-actions
Copy link
Copy Markdown

Benchmark Results

Benchmark Results Summary

Date: 2026-04-18 14:26:17 UTC

Benchmark Results for macos-aarch64-neon

System Information

  • OS: macos-latest
  • Arch: aarch64
  • SIMD tier: neon
  • Runner: GitHub Actions 1000007696
  • Runner arch (GH): ARM64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 14:23:53 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       3,311 ns/iter (+/- 475)
test rgb_to_hsv_row/simd/1280 ... bench:       1,516 ns/iter (+/- 191)
test rgb_to_hsv_row/scalar/1920 ... bench:       4,965 ns/iter (+/- 493)
test rgb_to_hsv_row/simd/1920 ... bench:       2,297 ns/iter (+/- 244)
test rgb_to_hsv_row/scalar/3840 ... bench:      10,588 ns/iter (+/- 1,814)
test rgb_to_hsv_row/simd/3840 ... bench:       4,709 ns/iter (+/- 411)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       2,945 ns/iter (+/- 533)
test yuv_420_to_rgb_row/simd/1280 ... bench:         510 ns/iter (+/- 129)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       4,142 ns/iter (+/- 336)
test yuv_420_to_rgb_row/simd/1920 ... bench:         816 ns/iter (+/- 112)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      11,468 ns/iter (+/- 4,520)
test yuv_420_to_rgb_row/simd/3840 ... bench:       1,731 ns/iter (+/- 358)

Benchmark Results for macos-aarch64-scalar

System Information

  • OS: macos-latest
  • Arch: aarch64
  • SIMD tier: scalar
  • Runner: GitHub Actions 1000007697
  • Runner arch (GH): ARM64
  • RUSTFLAGS: --cfg colconv_force_scalar
  • Date: 2026-04-18 14:23:52 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       3,202 ns/iter (+/- 157)
test rgb_to_hsv_row/simd/1280 ... bench:       3,264 ns/iter (+/- 308)
test rgb_to_hsv_row/scalar/1920 ... bench:       4,735 ns/iter (+/- 224)
test rgb_to_hsv_row/simd/1920 ... bench:       5,107 ns/iter (+/- 713)
test rgb_to_hsv_row/scalar/3840 ... bench:      10,513 ns/iter (+/- 1,907)
test rgb_to_hsv_row/simd/3840 ... bench:      10,464 ns/iter (+/- 319)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       2,964 ns/iter (+/- 350)
test yuv_420_to_rgb_row/simd/1280 ... bench:       2,960 ns/iter (+/- 201)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       4,464 ns/iter (+/- 221)
test yuv_420_to_rgb_row/simd/1920 ... bench:       4,359 ns/iter (+/- 263)
test yuv_420_to_rgb_row/scalar/3840 ... bench:       8,986 ns/iter (+/- 623)
test yuv_420_to_rgb_row/simd/3840 ... bench:       9,152 ns/iter (+/- 430)

Benchmark Results for ubuntu-x86_64-avx2-max

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: avx2-max
  • Runner: GitHub Actions 1000007681
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_disable_avx512
  • Date: 2026-04-18 14:23:00 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,648 ns/iter (+/- 34)
test rgb_to_hsv_row/simd/1280 ... bench:       2,587 ns/iter (+/- 5)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,971 ns/iter (+/- 232)
test rgb_to_hsv_row/simd/1920 ... bench:       3,877 ns/iter (+/- 11)
test rgb_to_hsv_row/scalar/3840 ... bench:      13,976 ns/iter (+/- 76)
test rgb_to_hsv_row/simd/3840 ... bench:       7,759 ns/iter (+/- 47)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,810 ns/iter (+/- 74)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,005 ns/iter (+/- 3)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,282 ns/iter (+/- 10)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,504 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,592 ns/iter (+/- 41)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,012 ns/iter (+/- 2)

Benchmark Results for ubuntu-x86_64-default

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: default
  • Runner: GitHub Actions 1000007685
  • Runner arch (GH): X64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 14:22:59 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,650 ns/iter (+/- 15)
test rgb_to_hsv_row/simd/1280 ... bench:       2,588 ns/iter (+/- 113)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,976 ns/iter (+/- 197)
test rgb_to_hsv_row/simd/1920 ... bench:       3,882 ns/iter (+/- 13)
test rgb_to_hsv_row/scalar/3840 ... bench:      13,976 ns/iter (+/- 79)
test rgb_to_hsv_row/simd/3840 ... bench:       7,764 ns/iter (+/- 87)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,803 ns/iter (+/- 68)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,005 ns/iter (+/- 22)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,274 ns/iter (+/- 47)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,505 ns/iter (+/- 12)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,574 ns/iter (+/- 141)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,014 ns/iter (+/- 9)

Benchmark Results for ubuntu-x86_64-native

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: native
  • Runner: GitHub Actions 1000007684
  • Runner arch (GH): X64
  • RUSTFLAGS: -C target-cpu=native
  • Date: 2026-04-18 14:23:02 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       5,349 ns/iter (+/- 36)
test rgb_to_hsv_row/simd/1280 ... bench:       2,411 ns/iter (+/- 6)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,966 ns/iter (+/- 371)
test rgb_to_hsv_row/simd/1920 ... bench:       3,616 ns/iter (+/- 7)
test rgb_to_hsv_row/scalar/3840 ... bench:      15,946 ns/iter (+/- 43)
test rgb_to_hsv_row/simd/3840 ... bench:       7,231 ns/iter (+/- 23)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,847 ns/iter (+/- 62)
test yuv_420_to_rgb_row/simd/1280 ... bench:         934 ns/iter (+/- 9)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,258 ns/iter (+/- 20)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,399 ns/iter (+/- 7)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,508 ns/iter (+/- 40)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,798 ns/iter (+/- 3)

Benchmark Results for ubuntu-x86_64-scalar

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: scalar
  • Runner: GitHub Actions 1000007683
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_force_scalar
  • Date: 2026-04-18 14:22:57 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,621 ns/iter (+/- 66)
test rgb_to_hsv_row/simd/1280 ... bench:       4,622 ns/iter (+/- 66)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,926 ns/iter (+/- 40)
test rgb_to_hsv_row/simd/1920 ... bench:       6,926 ns/iter (+/- 30)
test rgb_to_hsv_row/scalar/3840 ... bench:      13,951 ns/iter (+/- 51)
test rgb_to_hsv_row/simd/3840 ... bench:      13,949 ns/iter (+/- 94)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,532 ns/iter (+/- 30)
test yuv_420_to_rgb_row/simd/1280 ... bench:       4,567 ns/iter (+/- 25)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       6,929 ns/iter (+/- 27)
test yuv_420_to_rgb_row/simd/1920 ... bench:       6,925 ns/iter (+/- 23)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      13,801 ns/iter (+/- 62)
test yuv_420_to_rgb_row/simd/3840 ... bench:      13,800 ns/iter (+/- 96)

Benchmark Results for ubuntu-x86_64-sse41-max

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: sse41-max
  • Runner: GitHub Actions 1000007682
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_disable_avx512 --cfg colconv_disable_avx2
  • Date: 2026-04-18 14:23:02 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,619 ns/iter (+/- 116)
test rgb_to_hsv_row/simd/1280 ... bench:       2,562 ns/iter (+/- 4)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,929 ns/iter (+/- 352)
test rgb_to_hsv_row/simd/1920 ... bench:       3,847 ns/iter (+/- 43)
test rgb_to_hsv_row/scalar/3840 ... bench:      13,910 ns/iter (+/- 226)
test rgb_to_hsv_row/simd/3840 ... bench:       7,691 ns/iter (+/- 221)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,582 ns/iter (+/- 28)
test yuv_420_to_rgb_row/simd/1280 ... bench:         903 ns/iter (+/- 0)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       6,912 ns/iter (+/- 126)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,360 ns/iter (+/- 2)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      13,775 ns/iter (+/- 44)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,712 ns/iter (+/- 5)

Benchmark Results for windows-x86_64-default

System Information

  • OS: windows-latest
  • Arch: x86_64
  • SIMD tier: default
  • Runner: GitHub Actions 1000007703
  • Runner arch (GH): X64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 14:25:57 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,663 ns/iter (+/- 85)
test rgb_to_hsv_row/simd/1280 ... bench:       2,618 ns/iter (+/- 570)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,037 ns/iter (+/- 1,338)
test rgb_to_hsv_row/simd/1920 ... bench:       3,908 ns/iter (+/- 134)
test rgb_to_hsv_row/scalar/3840 ... bench:      14,417 ns/iter (+/- 261)
test rgb_to_hsv_row/simd/3840 ... bench:       7,810 ns/iter (+/- 43)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,834 ns/iter (+/- 445)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,013 ns/iter (+/- 7)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,257 ns/iter (+/- 23)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,518 ns/iter (+/- 15)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,594 ns/iter (+/- 990)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,202 ns/iter (+/- 248)

View detailed results

Detailed Criterion results have been uploaded as artifacts. Download them from the workflow run to view charts and detailed statistics.

@al8n al8n changed the title feat(yuv420p): impl yuv420p pixel format conversion with simd support feat(0.1.0): row-primitive kernels with SIMD dispatch + Sink API (yuv420p, rgb→hsv, bgr↔rgb) Apr 18, 2026
@uqio uqio merged commit cd456e8 into main Apr 18, 2026
43 of 57 checks passed
@github-actions
Copy link
Copy Markdown

Benchmark Results

Benchmark Results Summary

Date: 2026-04-18 14:42:50 UTC

Benchmark Results for macos-aarch64-neon

System Information

  • OS: macos-latest
  • Arch: aarch64
  • SIMD tier: neon
  • Runner: GitHub Actions 1000007742
  • Runner arch (GH): ARM64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 14:41:03 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,265 ns/iter (+/- 1,075)
test rgb_to_hsv_row/simd/1280 ... bench:       2,162 ns/iter (+/- 483)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,191 ns/iter (+/- 1,360)
test rgb_to_hsv_row/simd/1920 ... bench:       2,857 ns/iter (+/- 648)
test rgb_to_hsv_row/scalar/3840 ... bench:      13,908 ns/iter (+/- 3,291)
test rgb_to_hsv_row/simd/3840 ... bench:       5,767 ns/iter (+/- 1,353)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       3,393 ns/iter (+/- 615)
test yuv_420_to_rgb_row/simd/1280 ... bench:         676 ns/iter (+/- 166)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       5,727 ns/iter (+/- 1,241)
test yuv_420_to_rgb_row/simd/1920 ... bench:         980 ns/iter (+/- 326)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      11,934 ns/iter (+/- 3,010)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,060 ns/iter (+/- 522)

Benchmark Results for macos-aarch64-scalar

System Information

  • OS: macos-latest
  • Arch: aarch64
  • SIMD tier: scalar
  • Runner: GitHub Actions 1000007743
  • Runner arch (GH): ARM64
  • RUSTFLAGS: --cfg colconv_force_scalar
  • Date: 2026-04-18 14:40:48 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       3,315 ns/iter (+/- 119)
test rgb_to_hsv_row/simd/1280 ... bench:       3,350 ns/iter (+/- 547)
test rgb_to_hsv_row/scalar/1920 ... bench:       5,155 ns/iter (+/- 933)
test rgb_to_hsv_row/simd/1920 ... bench:       4,995 ns/iter (+/- 229)
test rgb_to_hsv_row/scalar/3840 ... bench:      10,178 ns/iter (+/- 893)
test rgb_to_hsv_row/simd/3840 ... bench:      10,427 ns/iter (+/- 835)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       2,933 ns/iter (+/- 536)
test yuv_420_to_rgb_row/simd/1280 ... bench:       2,902 ns/iter (+/- 341)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       4,232 ns/iter (+/- 331)
test yuv_420_to_rgb_row/simd/1920 ... bench:       4,317 ns/iter (+/- 582)
test yuv_420_to_rgb_row/scalar/3840 ... bench:       8,375 ns/iter (+/- 538)
test yuv_420_to_rgb_row/simd/3840 ... bench:       8,732 ns/iter (+/- 724)

Benchmark Results for ubuntu-x86_64-avx2-max

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: avx2-max
  • Runner: GitHub Actions 1000007752
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_disable_avx512
  • Date: 2026-04-18 14:40:56 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,643 ns/iter (+/- 67)
test rgb_to_hsv_row/simd/1280 ... bench:       2,591 ns/iter (+/- 6)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,967 ns/iter (+/- 16)
test rgb_to_hsv_row/simd/1920 ... bench:       3,881 ns/iter (+/- 5)
test rgb_to_hsv_row/scalar/3840 ... bench:      13,954 ns/iter (+/- 47)
test rgb_to_hsv_row/simd/3840 ... bench:       7,765 ns/iter (+/- 243)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,805 ns/iter (+/- 46)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,005 ns/iter (+/- 26)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,277 ns/iter (+/- 22)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,505 ns/iter (+/- 2)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,586 ns/iter (+/- 53)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,013 ns/iter (+/- 9)

Benchmark Results for ubuntu-x86_64-default

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: default
  • Runner: GitHub Actions 1000007753
  • Runner arch (GH): X64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 14:40:54 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,645 ns/iter (+/- 22)
test rgb_to_hsv_row/simd/1280 ... bench:       2,587 ns/iter (+/- 4)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,970 ns/iter (+/- 179)
test rgb_to_hsv_row/simd/1920 ... bench:       3,878 ns/iter (+/- 4)
test rgb_to_hsv_row/scalar/3840 ... bench:      14,000 ns/iter (+/- 53)
test rgb_to_hsv_row/simd/3840 ... bench:       7,765 ns/iter (+/- 14)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,803 ns/iter (+/- 382)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,004 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,274 ns/iter (+/- 40)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,505 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,562 ns/iter (+/- 30)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,011 ns/iter (+/- 2)

Benchmark Results for ubuntu-x86_64-native

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: native
  • Runner: GitHub Actions 1000007750
  • Runner arch (GH): X64
  • RUSTFLAGS: -C target-cpu=native
  • Date: 2026-04-18 14:41:04 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       5,313 ns/iter (+/- 30)
test rgb_to_hsv_row/simd/1280 ... bench:       2,411 ns/iter (+/- 5)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,960 ns/iter (+/- 380)
test rgb_to_hsv_row/simd/1920 ... bench:       3,615 ns/iter (+/- 6)
test rgb_to_hsv_row/scalar/3840 ... bench:      15,954 ns/iter (+/- 44)
test rgb_to_hsv_row/simd/3840 ... bench:       7,229 ns/iter (+/- 28)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,897 ns/iter (+/- 149)
test yuv_420_to_rgb_row/simd/1280 ... bench:         934 ns/iter (+/- 3)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,256 ns/iter (+/- 570)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,400 ns/iter (+/- 11)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,500 ns/iter (+/- 112)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,800 ns/iter (+/- 2)

Benchmark Results for ubuntu-x86_64-scalar

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: scalar
  • Runner: GitHub Actions 1000007751
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_force_scalar
  • Date: 2026-04-18 14:40:54 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,627 ns/iter (+/- 92)
test rgb_to_hsv_row/simd/1280 ... bench:       4,628 ns/iter (+/- 22)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,928 ns/iter (+/- 36)
test rgb_to_hsv_row/simd/1920 ... bench:       6,922 ns/iter (+/- 14)
test rgb_to_hsv_row/scalar/3840 ... bench:      13,916 ns/iter (+/- 72)
test rgb_to_hsv_row/simd/3840 ... bench:      13,938 ns/iter (+/- 125)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,570 ns/iter (+/- 10)
test yuv_420_to_rgb_row/simd/1280 ... bench:       4,571 ns/iter (+/- 47)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       6,930 ns/iter (+/- 36)
test yuv_420_to_rgb_row/simd/1920 ... bench:       6,931 ns/iter (+/- 311)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      13,801 ns/iter (+/- 28)
test yuv_420_to_rgb_row/simd/3840 ... bench:      13,800 ns/iter (+/- 49)

Benchmark Results for ubuntu-x86_64-sse41-max

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: sse41-max
  • Runner: GitHub Actions 1000007749
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_disable_avx512 --cfg colconv_disable_avx2
  • Date: 2026-04-18 14:41:02 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,629 ns/iter (+/- 55)
test rgb_to_hsv_row/simd/1280 ... bench:       2,563 ns/iter (+/- 11)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,928 ns/iter (+/- 414)
test rgb_to_hsv_row/simd/1920 ... bench:       3,850 ns/iter (+/- 12)
test rgb_to_hsv_row/scalar/3840 ... bench:      13,960 ns/iter (+/- 69)
test rgb_to_hsv_row/simd/3840 ... bench:       7,700 ns/iter (+/- 69)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,561 ns/iter (+/- 12)
test yuv_420_to_rgb_row/simd/1280 ... bench:         904 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       6,910 ns/iter (+/- 27)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,362 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      13,853 ns/iter (+/- 137)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,713 ns/iter (+/- 3)

Benchmark Results for windows-x86_64-default

System Information

  • OS: windows-latest
  • Arch: x86_64
  • SIMD tier: default
  • Runner: GitHub Actions 1000007758
  • Runner arch (GH): X64
  • RUSTFLAGS: ``
  • Date: 2026-04-18 14:41:36 UTC

all

test rgb_to_hsv_row/scalar/1280 ... bench:       4,307 ns/iter (+/- 30)
test rgb_to_hsv_row/simd/1280 ... bench:       3,681 ns/iter (+/- 122)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,477 ns/iter (+/- 37)
test rgb_to_hsv_row/simd/1920 ... bench:       5,529 ns/iter (+/- 209)
test rgb_to_hsv_row/scalar/3840 ... bench:      13,168 ns/iter (+/- 148)
test rgb_to_hsv_row/simd/3840 ... bench:      11,040 ns/iter (+/- 361)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       3,918 ns/iter (+/- 86)
test yuv_420_to_rgb_row/simd/1280 ... bench:         779 ns/iter (+/- 8)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       5,888 ns/iter (+/- 144)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,167 ns/iter (+/- 15)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      11,800 ns/iter (+/- 270)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,342 ns/iter (+/- 30)

View detailed results

Detailed Criterion results have been uploaded as artifacts. Download them from the workflow run to view charts and detailed statistics.

@al8n al8n deleted the feat/yuv420p branch April 18, 2026 23:33
al8n pushed a commit that referenced this pull request Apr 25, 2026
Resolves the medium-severity Codex finding (round 7): finite WB
gains and CCM coefficients can be arbitrarily large under the
existing `is_finite()` check, and a pathological metadata pipeline
could produce values that overflow per-pixel f32 matmul during
fusion or per-pixel multiply-add — clamps would saturate (Inf →
255) or NaN-cast (NaN → 0), silently corrupting pixels.

Bounded both validators to `1e6` (`WhiteBalance::MAX_GAIN`,
`ColorCorrectionMatrix::MAX_COEFFICIENT_ABS`):

- Real-world WB gains are O(1–10) (extreme tungsten ~3, daylight
  ~1.5–2). 1e6 is six orders of magnitude over typical, but
  21 orders under the value at which f32 matmul could overflow
  given 16-bit samples — provides massive headroom while closing
  the door on bad metadata.
- Real-world CCM coefficients are O(1–5) (crosstalk subtraction
  on the off-diagonals can be negative ~-0.3, diagonal entries
  ~1.0–1.5). Same 1e6 bound, with both positive and negative
  cap (`-MAX..=MAX`).
- Overflow analysis spelled out in the doc comments: the largest
  per-channel sum at the bound is `3 * 1e6 * 1e6 * 65535 ≈
  1.97e17`, ~21 orders of magnitude under `f32::MAX ≈ 3.4e38`.
  No Inf, no NaN possible from validated inputs.

New error variants:
- `WhiteBalanceError::OutOfBounds { channel, value, max }`
- `ColorCorrectionMatrixError::OutOfBounds { row, col, value, max_abs }`
- Both `#[non_exhaustive]`, `IsVariant`-derived, `thiserror::Error`.
- Public constants `WhiteBalance::MAX_GAIN` and
  `ColorCorrectionMatrix::MAX_COEFFICIENT_ABS` so callers can
  introspect the bound rather than hard-coding.

Codex's high-severity Finding #1 (Bayer16 sample-range failure
panics rather than returning Err) is **rejected** for this PR
with rationale on the GitHub thread: matches the crate-wide
pattern used by `Yuv420pFrame16` / `Yuv422pFrame16` /
`Yuv444pFrame16` / `Yuv440pFrame16` (each pairs `try_new` /
`try_new_checked` the same way), Bayer16 diverging would create
asymmetry, and the recoverable path already exists via
`BayerFrame16::try_new_checked`. Adding a wrapper-error walker
signature for the unchecked-input case is unjustified API surface
for a contract that's well-documented and consistent with the
established crate-wide model.

Tests (6 new, all green):
- `wb_try_new_rejects_extreme_finite_gain` — `1e10` rejected
  even though it's finite + non-negative.
- `wb_try_new_accepts_value_at_bound` — exactly `MAX_GAIN`
  permitted (boundary inclusive).
- `ccm_try_new_rejects_extreme_finite_coefficient` — `1e30`
  rejected as positive overflow risk.
- `ccm_try_new_rejects_extreme_negative_coefficient` — `-1e10`
  rejected (symmetric bound).
- `ccm_try_new_accepts_typical_negative_off_diagonal` — real
  CCM with crosstalk subtraction validates cleanly.
- `fuse_wb_ccm_at_bounds_with_max_sample_stays_finite` —
  worst-case stress: every coefficient at the bound, every
  sample at u16 max; per-pixel sum stays finite (no overflow).

Full lib suite: 398 tests passing (was 392; +6). wasm32 +
x86_64 cross-targets clean; `cargo doc` clean.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants