Skip to content

feat(yuv): add yuv420p12/14 + P012 via const-generic BITS#6

Merged
uqio merged 4 commits intomainfrom
feat/yuv420p12-yuv420p14-p012
Apr 19, 2026
Merged

feat(yuv): add yuv420p12/14 + P012 via const-generic BITS#6
uqio merged 4 commits intomainfrom
feat/yuv420p12-yuv420p14-p012

Conversation

@uqio
Copy link
Copy Markdown
Collaborator

@uqio uqio commented Apr 19, 2026

Summary

Ships three new high-bit-depth YUV source formats on top of a
const-generic refactor of the existing 10-bit pipeline:

  • Yuv420p12 — planar 4:2:0, 12-bit, low-bit-packed (yuv420p12le).
  • Yuv420p14 — planar 4:2:0, 14-bit, low-bit-packed (yuv420p14le).
  • P012 — semi-planar 4:2:0, 12-bit, high-bit-packed (p012le).

The existing 10-bit scalar + 5 SIMD backends (NEON, SSE4.1, AVX2,
AVX-512, wasm simd128) are refactored to const BITS: u32 — all three
new formats reuse the exact same Q15 kernel machinery, monomorphized
per depth. No new SIMD backend code.

Core changes

Frame layer (src/frame.rs)

  • PnFrame<'a, const BITS: u32> generalizes the old P010Frame.
    Type aliases pin each shipped depth: P010Frame = PnFrame<'_, 10>,
    P012Frame = PnFrame<'_, 12>.
  • PnFrameError / PnFramePlane enums (back-compat aliased to
    P010FrameError / P010FramePlane). New UnsupportedBits
    variant; SampleLowBitsSet now carries low_bits: u32.
  • try_new_checked low-bits scan generalizes from hardcoded & 0x3F
    to & ((1 << (16 - BITS)) - 1). Docs updated to flag the P012
    weakness explicitly
    — at BITS == 12 the 4-low-bits check
    accepts all multiple-of-16 samples, which includes common
    yuv420p12le flat-region values (Y=256/1024, UV=2048).
  • New planar frame aliases: Yuv420p12Frame = Yuv420pFrame16<'_, 12>
    and Yuv420p14Frame = Yuv420pFrame16<'_, 14> (the underlying
    struct already accepts BITS ∈ {10, 12, 14}).

Scalar + SIMD kernels

Renamed and made const-generic:

Old (10-bit only) New (const BITS: u32)
yuv420p10_to_rgb_row yuv_420p_n_to_rgb_row::<BITS>
yuv420p10_to_rgb_u16_row yuv_420p_n_to_rgb_u16_row::<BITS>
p010_to_rgb_row p_n_to_rgb_row::<BITS>
p010_to_rgb_u16_row p_n_to_rgb_u16_row::<BITS>

BITS flows through:

  • Planar kernels: debug_assert!(BITS ∈ {10, 12, 14}).
  • Semi-planar Pn kernels: debug_assert!(BITS ∈ {10, 12}).
  • Runtime-shift plumbing: NEON vshlq_u16(_, vdupq_n_s16(-(16 - BITS))),
    x86 _mm*_srl_epi16(_, shr_count) with shr_count derived once
    per call from BITS, wasm u16x8_shr(_, (16 - BITS) as u32).
  • u16-output clamp derives out_max = (1 << BITS) - 1 at call time
    (was hardcoded OUT_MAX_10 = 1023).

Public per-format dispatchers stay (yuv420p10_to_rgb_row,
p010_to_rgb_row, etc.) plus six new ones:
yuv420p12_to_rgb_row / _u16_row, yuv420p14_to_rgb_row /
_u16_row, p012_to_rgb_row / _u16_row. Each monomorphizes its
own BITS; back-compat preserved.

New yuv/ modules

  • src/yuv/yuv420p12.rs — marker Yuv420p12, Yuv420p12Row,
    Yuv420p12Sink, yuv420p12_to walker.
  • src/yuv/yuv420p14.rs — same shape with BITS == 14.
  • src/yuv/p012.rs — marker P012, P012Row, P012Sink,
    p012_to walker (via P012Frame = PnFrame<'_, 12>).

MixedSinker (src/sinker/mixed.rs)

Three new impl PixelSink for MixedSinker<'_, F> blocks, each with
their own luma downshift, native-depth rgb_u16 packing,
scratch-buffer/HSV branching, and row-shape validation:

  • MixedSinker<Yuv420p12> — luma >> 4, u16 output in
    yuv420p12le low-packed convention.
  • MixedSinker<Yuv420p14> — luma >> 6.
  • MixedSinker<P012> — luma >> 8 (same accessor as P010 since
    both put active bits in the high positions of the u16).

Seven new RowSlice variants: Y12, UHalf12, VHalf12,
UvHalf12, Y14, UHalf14, VHalf14.

Tests

SIMD equivalence per backend (5 backends × 2 formats × 2 depths)

Every backend (NEON / SSE4.1 / AVX2 / AVX-512 / wasm simd128) gained
const-generic equivalence helpers:

  • check_planar_u8_*_equivalence_n::<BITS>
  • check_planar_u16_*_equivalence_n::<BITS>
  • check_pn_u8_*_equivalence_n::<BITS> (semi-planar only, BITS ∈ {10, 12})
  • check_pn_u16_*_equivalence_n::<BITS>

Exercised for BITS == 12 and BITS == 14 across every matrix
(Bt601, Bt709, Bt2020Ncl, Smpte240m, Fcc, YCgCo) × range
× tail-width case (1920, odd tails, etc.).

MixedSinker integration (19 new end-to-end tests)

For Yuv420p12 / Yuv420p14 / P012:

  • rgb_u8_only_gray_is_gray
  • rgb_u16_only_native_depth_gray
  • rgb_u8_and_u16_both_populated
  • luma_downshifts_to_8bit
  • hsv_from_gray_is_zero_hue_zero_sat
  • rgb_u16_too_short_returns_err
  • with_simd_false_matches_with_simd_true
  • p012_matches_yuv420p12_mixed_sinker_with_shifted_samples
    (cross-layout parity)

Frame-level regression tests

  • p012_try_new_checked_rejects_low_bits_set — positive validation.
  • p012_try_new_checked_accepts_low_packed_flat_content_by_design
    — pins the known try_new_checked limitation at BITS == 12
    (accepts Y=0x0100 / UV=0x0800 even though that's mispacked
    yuv420p12le). Documents the weakness in code so future attempts
    to strengthen try_new_checked have a concrete test to validate
    against.

Benches

Three new Criterion harnesses mirroring the 10-bit pattern:

  • yuv_420p12_to_rgb (u8 + u16 output, 720p / 1080p / 4K widths)
  • yuv_420p14_to_rgb (same)
  • p012_to_rgb (same, high-bit-packed sample generator)

Documentation updates

  • src/lib.rs — added "Supported source formats" table +
    "Not yet shipped" section.
  • src/yuv/mod.rs — structured by 8-bit / high-bit-depth planar /
    high-bit-depth semi-planar, with an explicit "Not yet shipped"
    block (16-bit family, 4:2:2 / 4:4:4, packed RGB).
  • SIMD backend doc blocks refreshed: shifted right by BITS - 6
    shifted right by 16 - BITS, scalar::p_n_to_rgb_*::<10>
    ::<BITS>, clarified clamp_u10 helper's max is derived from
    BITS.
  • docs/color-conversion-functions.md — Tier 1/2 tables split out
    per-depth rows; added "Shipped (v0.4a)" section; split original
    Ship 4 into Ship 4a (SHIPPED) and Ship 4b (16-bit, not yet —
    blocker: Q15 chroma_sum overflows i32 at BITS == 16).
  • docs/hardware-decode-with-ffmpeg-next.md — added P012 decode
    example, updated "P010 frames have garbage Y values" section to
    cover both P010 and P012 with the generalized >> (16 - BITS)
    rule, dropped (planned) markers now that the API ships.

Verification

  • aarch64 NEON: cargo test --lib186 passed (164 → 186
    with +19 MixedSinker + +3 frame regression tests).
  • cargo check --lib --tests --target x86_64-unknown-freebsd
    clean.
  • RUSTFLAGS='-C target-feature=+simd128' cargo check --lib --tests --target wasm32-wasip1
    clean.
  • cargo check --benches — clean.
  • cargo doc --lib --no-deps — builds; 21 pre-existing
    "redundant explicit link target" warnings (not introduced here).

Review history in this PR

Earlier iterations (pre-rebase on the final commit) surfaced issues
that are now fixed:

  • Non-NEON SIMD backends initially kept hardcoded srli::<6> and
    OUT_MAX_10 = 1023 after the const BITS rename — every ::<6>
    / 1023 now derives from BITS.
  • x86/wasm test modules left half-updated — all scalar::...::<BITS>
    in test scope replaced with ::<10>, and old SIMD function names
    in test helpers renamed.
  • P012 try_new_checked flagged as a silent-corruption path for
    common yuv420p12le flat content — docs now call this out
    explicitly and the behavior is pinned by a named regression test
    so the type system (choosing P012Frame vs Yuv420p12Frame at
    construction based on decoder metadata) is clearly the intended
    provenance guarantee.

Follow-ups (not in this PR)

  • Ship 4b: 16-bit completion (yuv420p16le, p016le). Blocked
    on the Q15 chroma_sum overflow — needs either i64 intermediates
    or a lower-Q coefficient format. Current kernels explicitly
    debug_assert! against BITS == 16 so this won't silently enter
    the Q15 code path.
  • Ship 5: NV16 / NV24 / NV42 (4:2:2 / 4:4:4 semi-planar 8-bit).
  • Ship 6: alpha + remaining u16 semi-planar (P210 / P216 /
    P410 / P416) and planar yuv422p / yuv444p families.

Test plan

  • CI passes on aarch64, x86_64 (Linux + macOS + Windows), and
    wasm32 (wasm32-wasip1 with +simd128).
  • cargo bench baseline on Apple M-series — expected ~5×
    SIMD speedup on the 12/14-bit u8 paths and ~4× on the u16 paths
    (mirrors the v0.2 / v0.3 numbers for 10-bit).
  • Manual spot-check of an HEVC Main 12 clip (once a real
    decoder emitting p012le is available) — MixedSinker<P012>
    RGB output against a reference libswscale conversion.

🤖 Generated with Claude Code

@al8n al8n requested a review from Copilot April 19, 2026 10:34
@github-actions
Copy link
Copy Markdown

Benchmark Results

Benchmark Results Summary

Date: 2026-04-19 10:35:00 UTC

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

This PR generalizes existing 10‑bit YUV420p/P010 row kernels to be const‑generic over bit depth (BITS) and updates dispatch/doc references accordingly, as groundwork for adding additional high bit‑depth YUV420p formats.

Changes:

  • Generalize scalar P010 row kernels into p_n_* const‑generic functions and update scalar tests to call the new entrypoints.
  • Update row dispatch (src/row/mod.rs) and multiple SIMD backends to call the renamed/generic kernels for the 10‑bit path.
  • Update SIMD/scalar equivalence tests and documentation references to the new generic function names (partially).

Reviewed changes

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

Show a summary per file
File Description
src/row/scalar.rs Renames P010 scalar kernels to p_n_* and makes them const‑generic over BITS; updates scalar tests to match.
src/row/mod.rs Updates dispatcher calls/docs to use the renamed/generic SIMD entrypoints for 10‑bit.
src/row/arch/neon.rs Generalizes NEON high bit‑depth kernels over BITS (incl. u16 clamp max derived from BITS).
src/row/arch/x86_sse41.rs Renames SIMD entrypoints to const‑generic forms and updates some test scaffolding (but leaves compilation issues).
src/row/arch/x86_avx2.rs Renames SIMD entrypoints to const‑generic forms (but leaves u16 clamp/shift logic and test callsites inconsistent).
src/row/arch/x86_avx512.rs Renames SIMD entrypoints to const‑generic forms (but leaves u16 clamp/shift logic and test callsites inconsistent).
src/row/arch/wasm_simd128.rs Renames SIMD entrypoints to const‑generic forms (test updates appear incomplete in the provided diff).
Comments suppressed due to low confidence (3)

src/row/arch/x86_avx512.rs:750

  • p_n_to_rgb_u16_row is generic over BITS, but it still uses OUT_MAX_10 = 1023 and shifts by a fixed 6 bits. This makes non-10-bit instantiations (e.g. P012) incorrect and clamps away valid output. Compute both shift (16 - BITS) and max ((1 << BITS) - 1) from BITS.
  let coeffs = scalar::Coefficients::for_matrix(matrix);
  let (y_off, y_scale, c_scale) = scalar::range_params_n::<BITS, BITS>(full_range);
  let bias = scalar::chroma_bias::<BITS>();
  const RND: i32 = 1 << 14;
  const OUT_MAX_10: i16 = 1023;

  // SAFETY: AVX‑512BW availability is the caller's obligation.
  unsafe {
    let rnd_v = _mm512_set1_epi32(RND);
    let y_off_v = _mm512_set1_epi16(y_off as i16);
    let y_scale_v = _mm512_set1_epi32(y_scale);
    let c_scale_v = _mm512_set1_epi32(c_scale);
    let bias_v = _mm512_set1_epi16(bias as i16);
    let max_v = _mm512_set1_epi16(OUT_MAX_10);
    let zero_v = _mm512_set1_epi16(0);
    let cru = _mm512_set1_epi32(coeffs.r_u());

src/row/arch/x86_avx2.rs:701

  • p_n_to_rgb_u16_row is now const-generic over BITS, but it still clamps to OUT_MAX_10 = 1023 and shifts by a fixed 6 bits. That makes BITS=12 (P012) output incorrect and clamps away valid values. Derive both the shift (16 - BITS) and max ((1 << BITS) - 1) from BITS.
  let coeffs = scalar::Coefficients::for_matrix(matrix);
  let (y_off, y_scale, c_scale) = scalar::range_params_n::<BITS, BITS>(full_range);
  let bias = scalar::chroma_bias::<BITS>();
  const RND: i32 = 1 << 14;
  const OUT_MAX_10: i16 = 1023;

  // SAFETY: AVX2 availability is the caller's obligation.
  unsafe {
    let rnd_v = _mm256_set1_epi32(RND);
    let y_off_v = _mm256_set1_epi16(y_off as i16);
    let y_scale_v = _mm256_set1_epi32(y_scale);
    let c_scale_v = _mm256_set1_epi32(c_scale);
    let bias_v = _mm256_set1_epi16(bias as i16);
    let max_v = _mm256_set1_epi16(OUT_MAX_10);
    let zero_v = _mm256_set1_epi16(0);

src/row/arch/x86_avx512.rs:640

  • p_n_to_rgb_row is const-generic over BITS, but it still shifts samples by a fixed 6 bits (_mm512_srli_epi16::<6>). That only matches 10-bit high packing (P010). For BITS=12 (P012) this needs to shift by 16 - BITS (4) to extract the active high bits correctly.
pub(crate) unsafe fn p_n_to_rgb_row<const BITS: u32>(
  y: &[u16],
  uv_half: &[u16],
  rgb_out: &mut [u8],
  width: usize,
  matrix: ColorMatrix,
  full_range: bool,
) {
  debug_assert_eq!(width & 1, 0);
  debug_assert!(y.len() >= width);
  debug_assert!(uv_half.len() >= width);
  debug_assert!(rgb_out.len() >= width * 3);

  let coeffs = scalar::Coefficients::for_matrix(matrix);
  let (y_off, y_scale, c_scale) = scalar::range_params_n::<BITS, 8>(full_range);
  let bias = scalar::chroma_bias::<BITS>();
  const RND: i32 = 1 << 14;

  // SAFETY: AVX‑512BW availability is the caller's obligation.
  unsafe {
    let rnd_v = _mm512_set1_epi32(RND);
    let y_off_v = _mm512_set1_epi16(y_off as i16);
    let y_scale_v = _mm512_set1_epi32(y_scale);
    let c_scale_v = _mm512_set1_epi32(c_scale);
    let bias_v = _mm512_set1_epi16(bias as i16);
    let cru = _mm512_set1_epi32(coeffs.r_u());
    let crv = _mm512_set1_epi32(coeffs.r_v());
    let cgu = _mm512_set1_epi32(coeffs.g_u());
    let cgv = _mm512_set1_epi32(coeffs.g_v());
    let cbu = _mm512_set1_epi32(coeffs.b_u());
    let cbv = _mm512_set1_epi32(coeffs.b_v());

    let pack_fixup = _mm512_setr_epi64(0, 2, 4, 6, 1, 3, 5, 7);
    let dup_lo_idx = _mm512_setr_epi64(0, 1, 8, 9, 2, 3, 10, 11);
    let dup_hi_idx = _mm512_setr_epi64(4, 5, 12, 13, 6, 7, 14, 15);

    let mut x = 0usize;
    while x + 64 <= width {
      let y_low_i16 = _mm512_srli_epi16::<6>(_mm512_loadu_si512(y.as_ptr().add(x).cast()));
      let y_high_i16 = _mm512_srli_epi16::<6>(_mm512_loadu_si512(y.as_ptr().add(x + 32).cast()));
      let (u_vec, v_vec) = deinterleave_uv_u16_avx512(uv_half.as_ptr().add(x));
      let u_vec = _mm512_srli_epi16::<6>(u_vec);
      let v_vec = _mm512_srli_epi16::<6>(v_vec);

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

Comment thread src/row/arch/x86_sse41.rs Outdated
scalar::yuv_420p_n_to_rgb_row::<10>(&y, &u, &v, &mut rgb_scalar, width, matrix, full_range);
scalar::yuv_420p_n_to_rgb_row::<BITS>(&y, &u, &v, &mut rgb_scalar, width, matrix, full_range);
unsafe {
yuv420p10_to_rgb_row(&y, &u, &v, &mut rgb_simd, width, matrix, full_range);
Comment on lines 409 to 424
@@ -419,7 +419,7 @@ pub(crate) unsafe fn yuv420p10_to_rgb_u16_row(
let y_scale_v = _mm512_set1_epi32(y_scale);
let c_scale_v = _mm512_set1_epi32(c_scale);
let bias_v = _mm512_set1_epi16(bias as i16);
let mask_v = _mm512_set1_epi16(scalar::bits_mask::<10>() as i16);
let mask_v = _mm512_set1_epi16(scalar::bits_mask::<BITS>() as i16);
let max_v = _mm512_set1_epi16(OUT_MAX_10);
let zero_v = _mm512_set1_epi16(0);
Comment thread src/row/arch/x86_sse41.rs Outdated
full_range,
);
unsafe {
yuv420p10_to_rgb_u16_row(&y, &u, &v, &mut rgb_simd, width, matrix, full_range);
Comment thread src/row/arch/x86_sse41.rs Outdated
scalar::p010_to_rgb_u16_row(&y, &uv, &mut rgb_scalar, width, matrix, full_range);
scalar::p_n_to_rgb_u16_row::<BITS>(&y, &uv, &mut rgb_scalar, width, matrix, full_range);
unsafe {
p010_to_rgb_u16_row(&y, &uv, &mut rgb_simd, width, matrix, full_range);
Comment thread src/row/arch/x86_avx2.rs
Comment on lines 551 to +566
@@ -562,8 +562,8 @@ pub(crate) unsafe fn p010_to_rgb_row(
debug_assert!(rgb_out.len() >= width * 3);

let coeffs = scalar::Coefficients::for_matrix(matrix);
let (y_off, y_scale, c_scale) = scalar::range_params_n::<10, 8>(full_range);
let bias = scalar::chroma_bias::<10>();
let (y_off, y_scale, c_scale) = scalar::range_params_n::<BITS, 8>(full_range);
let bias = scalar::chroma_bias::<BITS>();
Comment thread src/row/arch/x86_sse41.rs
Comment on lines +42 to +43
_mm_setr_epi8, _mm_shuffle_epi8, _mm_srai_epi32, _mm_srl_epi16, _mm_srli_si128, _mm_sub_epi16,
_mm_unpackhi_epi16, _mm_unpackhi_epi64, _mm_unpacklo_epi16, _mm_unpacklo_epi64,
Comment thread src/row/arch/x86_sse41.rs Outdated
Comment on lines 1519 to 1522
scalar::p_n_to_rgb_row::<BITS>(&y, &uv, &mut rgb_scalar, width, matrix, full_range);
unsafe {
p010_to_rgb_row(&y, &uv, &mut rgb_simd, width, matrix, full_range);
}
Comment thread src/row/arch/x86_avx2.rs Outdated
scalar::p010_to_rgb_u16_row(&y, &uv, &mut rgb_scalar, width, matrix, full_range);
scalar::p_n_to_rgb_u16_row::<BITS>(&y, &uv, &mut rgb_scalar, width, matrix, full_range);
unsafe {
p010_to_rgb_u16_row(&y, &uv, &mut rgb_simd, width, matrix, full_range);
Comment thread src/row/arch/x86_avx2.rs
Comment on lines 393 to 408
@@ -403,7 +403,7 @@ pub(crate) unsafe fn yuv420p10_to_rgb_u16_row(
let y_scale_v = _mm256_set1_epi32(y_scale);
let c_scale_v = _mm256_set1_epi32(c_scale);
let bias_v = _mm256_set1_epi16(bias as i16);
let mask_v = _mm256_set1_epi16(scalar::bits_mask::<10>() as i16);
let mask_v = _mm256_set1_epi16(scalar::bits_mask::<BITS>() as i16);
let max_v = _mm256_set1_epi16(OUT_MAX_10);
let zero_v = _mm256_set1_epi16(0);
Comment thread src/row/arch/x86_avx2.rs Outdated
full_range,
);
unsafe {
yuv420p10_to_rgb_u16_row(&y, &u, &v, &mut rgb_simd, width, matrix, full_range);
@codecov
Copy link
Copy Markdown

codecov bot commented Apr 19, 2026

Codecov Report

❌ Patch coverage is 87.12329% with 94 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
src/row/mod.rs 68.81% 58 Missing ⚠️
src/row/arch/x86_avx512.rs 89.10% 11 Missing ⚠️
src/row/arch/x86_sse41.rs 91.91% 8 Missing ⚠️
src/row/arch/x86_avx2.rs 93.93% 6 Missing ⚠️
src/frame.rs 78.26% 5 Missing ⚠️
src/row/scalar.rs 87.09% 4 Missing ⚠️
src/row/arch/neon.rs 97.75% 2 Missing ⚠️

📢 Thoughts on this report? Let us know!

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 generalizes the existing 10-bit YUV420p/P010 row conversion kernels to support additional high-bit-depth variants via a const BITS generic (notably enabling P012-style high-bit-packed semi-planar input), and updates SIMD backends/dispatchers accordingly.

Changes:

  • Generalize scalar P010 row kernels into p_n_to_rgb_*_row<const BITS: u32> using sample >> (16 - BITS) for high-bit-packed extraction.
  • Refactor SIMD backends (NEON/SSE4.1/AVX2/AVX-512/wasm simd128) to expose *_n_* kernels parameterized by BITS and update dispatch call sites.
  • Update/rename internal calls and tests for the new function names (still primarily exercised at BITS == 10).

Reviewed changes

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

Show a summary per file
File Description
src/row/scalar.rs Generalizes P010 scalar kernels to p_n_* with BITS-dependent shifts and range params; updates related tests.
src/row/mod.rs Updates SIMD dispatch call sites to the renamed/generic backend entry points.
src/row/arch/x86_sse41.rs Refactors P010 and yuv420p10 SIMD kernels to BITS-generic variants and adjusts tails to call the new scalar generics.
src/row/arch/x86_avx512.rs Same as above for AVX-512: BITS-generic kernels and shift-count handling.
src/row/arch/x86_avx2.rs Same as above for AVX2: BITS-generic kernels and shift-count handling.
src/row/arch/wasm_simd128.rs Same as above for wasm simd128: BITS-generic kernels and shift-count handling.
src/row/arch/neon.rs Extends NEON high-bit-depth kernels to BITS generics and switches semi-planar shifting to a 16 - BITS variable shift.
Comments suppressed due to low confidence (1)

src/row/arch/x86_sse41.rs:213

  • This doc block still describes the fixed 10-bit P010 implementation (e.g. “shifted right by 6 (_mm_srli_epi16::<6>)” and references yuv420p10_to_rgb_row), but the function is now generic over BITS and uses a variable shift (16 - BITS). Update the docs and the numerical-contract link to reference scalar::p_n_to_rgb_row::<BITS> so rustdoc doesn’t mislead or produce stale intra-doc links.
/// Byte‑identical to [`scalar::p_n_to_rgb_row::<10>`].
///
/// # Safety
///
/// 1. **SSE4.1 must be available on the current CPU.**

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

Comment thread src/row/arch/x86_avx2.rs
Comment on lines 666 to 670
/// # Numerical contract
///
/// Byte‑identical to [`scalar::p010_to_rgb_u16_row`].
/// Byte‑identical to [`scalar::p_n_to_rgb_u16_row::<10>`].
///
/// # Safety
Comment on lines 713 to 717
/// # Numerical contract
///
/// Byte‑identical to [`scalar::p010_to_rgb_u16_row`].
/// Byte‑identical to [`scalar::p_n_to_rgb_u16_row::<10>`].
///
/// # Safety
Comment thread src/row/scalar.rs
Comment on lines +452 to 456
let (y_off, y_scale, c_scale) = range_params_n::<BITS, BITS>(full_range);
let bias = chroma_bias::<BITS>();
let out_max: i32 = (1i32 << BITS) - 1;
let shift = 16 - BITS;

Comment thread src/row/mod.rs
Comment on lines 350 to 354
// SAFETY: NEON verified on this CPU; bounds / parity are
// the caller's obligation (asserted above).
unsafe {
arch::neon::yuv420p10_to_rgb_row(y, u_half, v_half, rgb_out, width, matrix, full_range);
arch::neon::yuv_420p_n_to_rgb_row::<10>(y, u_half, v_half, rgb_out, width, matrix, full_range);
}
Comment on lines 627 to 631
/// # Numerical contract
///
/// Byte‑identical to [`scalar::p010_to_rgb_u16_row`].
/// Byte‑identical to [`scalar::p_n_to_rgb_u16_row::<10>`].
///
/// # Safety
Comment thread src/row/scalar.rs
Comment on lines +354 to +358
/// shift: each `u16` load is extracted to its `BITS`‑bit value via
/// `sample >> (16 - BITS)`, then the same Q15 pipeline as
/// [`yuv_420p_n_to_rgb_row`] runs with the same `BITS`. For `BITS ==
/// 10` this is P010 (`>> 6`); for `BITS == 12` it's P012 (`>> 4`).
/// Mispacked input — e.g. a low‑bit‑packed buffer handed to this
Comment thread src/row/arch/x86_avx2.rs
Comment on lines 540 to 544
/// # Numerical contract
///
/// Byte‑identical to [`scalar::p010_to_rgb_row`].
/// Byte‑identical to [`scalar::p_n_to_rgb_row::<10>`].
///
/// # Safety
Comment on lines 585 to 589
///
/// # Numerical contract
///
/// Byte‑identical to [`scalar::p010_to_rgb_row`].
/// Byte‑identical to [`scalar::p_n_to_rgb_row::<10>`].
///
Comment on lines 512 to 515
/// # Numerical contract
///
/// Byte‑identical to [`scalar::p010_to_rgb_row`].
/// Byte‑identical to [`scalar::p_n_to_rgb_row::<10>`].
///
Comment thread src/row/arch/neon.rs
Comment on lines 654 to 657
/// # Numerical contract
///
/// Byte‑identical to [`scalar::p010_to_rgb_u16_row`].
/// Byte‑identical to [`scalar::p_n_to_rgb_u16_row::<10>`].
///
@github-actions
Copy link
Copy Markdown

Benchmark Results

Benchmark Results Summary

Date: 2026-04-19 11:01:06 UTC

Benchmark Results for macos-aarch64-neon

System Information

  • OS: macos-latest
  • Arch: aarch64
  • SIMD tier: neon
  • Runner: GitHub Actions 1000009504
  • Runner arch (GH): ARM64
  • RUSTFLAGS: ``
  • Date: 2026-04-19 10:55:24 UTC

all

test nv12_to_rgb_row/scalar/1280 ... bench:       2,972 ns/iter (+/- 274)
test nv12_to_rgb_row/simd/1280 ... bench:         620 ns/iter (+/- 86)
test nv12_to_rgb_row/scalar/1920 ... bench:       4,614 ns/iter (+/- 603)
test nv12_to_rgb_row/simd/1920 ... bench:         916 ns/iter (+/- 202)
test nv12_to_rgb_row/scalar/3840 ... bench:       9,519 ns/iter (+/- 1,259)
test nv12_to_rgb_row/simd/3840 ... bench:       1,665 ns/iter (+/- 246)
test nv21_to_rgb_row/scalar/1280 ... bench:       3,663 ns/iter (+/- 1,429)
test nv21_to_rgb_row/simd/1280 ... bench:         557 ns/iter (+/- 63)
test nv21_to_rgb_row/scalar/1920 ... bench:       4,467 ns/iter (+/- 745)
test nv21_to_rgb_row/simd/1920 ... bench:         823 ns/iter (+/- 65)
test nv21_to_rgb_row/scalar/3840 ... bench:       9,098 ns/iter (+/- 1,373)
test nv21_to_rgb_row/simd/3840 ... bench:       2,300 ns/iter (+/- 573)
test p010_to_rgb_row/u8_scalar/1280 ... bench:       4,652 ns/iter (+/- 950)
test p010_to_rgb_row/u8_simd/1280 ... bench:         832 ns/iter (+/- 181)
test p010_to_rgb_row/u8_scalar/1920 ... bench:       5,198 ns/iter (+/- 1,084)
test p010_to_rgb_row/u8_simd/1920 ... bench:         945 ns/iter (+/- 255)
test p010_to_rgb_row/u8_scalar/3840 ... bench:       9,026 ns/iter (+/- 1,583)
test p010_to_rgb_row/u8_simd/3840 ... bench:       1,768 ns/iter (+/- 226)
test p010_to_rgb_u16_row/u16_scalar/1280 ... bench:       3,457 ns/iter (+/- 917)
test p010_to_rgb_u16_row/u16_simd/1280 ... bench:         728 ns/iter (+/- 136)
test p010_to_rgb_u16_row/u16_scalar/1920 ... bench:       5,097 ns/iter (+/- 2,610)
test p010_to_rgb_u16_row/u16_simd/1920 ... bench:       1,128 ns/iter (+/- 282)
test p010_to_rgb_u16_row/u16_scalar/3840 ... bench:      10,159 ns/iter (+/- 3,944)
test p010_to_rgb_u16_row/u16_simd/3840 ... bench:       2,034 ns/iter (+/- 1,365)
test rgb_to_hsv_row/scalar/1280 ... bench:       4,259 ns/iter (+/- 1,295)
test rgb_to_hsv_row/simd/1280 ... bench:       1,622 ns/iter (+/- 267)
test rgb_to_hsv_row/scalar/1920 ... bench:       5,805 ns/iter (+/- 1,374)
test rgb_to_hsv_row/simd/1920 ... bench:       2,856 ns/iter (+/- 785)
test rgb_to_hsv_row/scalar/3840 ... bench:      11,453 ns/iter (+/- 2,501)
test rgb_to_hsv_row/simd/3840 ... bench:       4,842 ns/iter (+/- 965)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       3,246 ns/iter (+/- 686)
test yuv_420_to_rgb_row/simd/1280 ... bench:         548 ns/iter (+/- 91)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       4,463 ns/iter (+/- 559)
test yuv_420_to_rgb_row/simd/1920 ... bench:         883 ns/iter (+/- 123)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      10,029 ns/iter (+/- 1,858)
test yuv_420_to_rgb_row/simd/3840 ... bench:       1,619 ns/iter (+/- 203)
test yuv420p10_to_rgb_row/u8_scalar/1280 ... bench:       3,256 ns/iter (+/- 667)
test yuv420p10_to_rgb_row/u8_simd/1280 ... bench:         574 ns/iter (+/- 121)
test yuv420p10_to_rgb_row/u8_scalar/1920 ... bench:       4,983 ns/iter (+/- 855)
test yuv420p10_to_rgb_row/u8_simd/1920 ... bench:         774 ns/iter (+/- 125)
test yuv420p10_to_rgb_row/u8_scalar/3840 ... bench:      10,926 ns/iter (+/- 3,888)
test yuv420p10_to_rgb_row/u8_simd/3840 ... bench:       1,967 ns/iter (+/- 994)
test yuv420p10_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,014 ns/iter (+/- 690)
test yuv420p10_to_rgb_u16_row/u16_simd/1280 ... bench:         817 ns/iter (+/- 124)
test yuv420p10_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,062 ns/iter (+/- 1,205)
test yuv420p10_to_rgb_u16_row/u16_simd/1920 ... bench:       1,240 ns/iter (+/- 210)
test yuv420p10_to_rgb_u16_row/u16_scalar/3840 ... bench:      11,791 ns/iter (+/- 3,274)
test yuv420p10_to_rgb_u16_row/u16_simd/3840 ... bench:       2,024 ns/iter (+/- 743)

Benchmark Results for macos-aarch64-scalar

System Information

  • OS: macos-latest
  • Arch: aarch64
  • SIMD tier: scalar
  • Runner: GitHub Actions 1000009529
  • Runner arch (GH): ARM64
  • RUSTFLAGS: --cfg colconv_force_scalar
  • Date: 2026-04-19 10:55:57 UTC

all

test nv12_to_rgb_row/scalar/1280 ... bench:       2,951 ns/iter (+/- 48)
test nv12_to_rgb_row/simd/1280 ... bench:       2,954 ns/iter (+/- 55)
test nv12_to_rgb_row/scalar/1920 ... bench:       4,426 ns/iter (+/- 73)
test nv12_to_rgb_row/simd/1920 ... bench:       4,423 ns/iter (+/- 66)
test nv12_to_rgb_row/scalar/3840 ... bench:       8,832 ns/iter (+/- 194)
test nv12_to_rgb_row/simd/3840 ... bench:       8,836 ns/iter (+/- 184)
test nv21_to_rgb_row/scalar/1280 ... bench:       2,951 ns/iter (+/- 48)
test nv21_to_rgb_row/simd/1280 ... bench:       2,949 ns/iter (+/- 59)
test nv21_to_rgb_row/scalar/1920 ... bench:       4,403 ns/iter (+/- 167)
test nv21_to_rgb_row/simd/1920 ... bench:       4,421 ns/iter (+/- 130)
test nv21_to_rgb_row/scalar/3840 ... bench:      10,121 ns/iter (+/- 601)
test nv21_to_rgb_row/simd/3840 ... bench:      10,351 ns/iter (+/- 926)
test p010_to_rgb_row/u8_scalar/1280 ... bench:       3,168 ns/iter (+/- 331)
test p010_to_rgb_row/u8_simd/1280 ... bench:       3,083 ns/iter (+/- 303)
test p010_to_rgb_row/u8_scalar/1920 ... bench:       4,441 ns/iter (+/- 49)
test p010_to_rgb_row/u8_simd/1920 ... bench:       4,435 ns/iter (+/- 110)
test p010_to_rgb_row/u8_scalar/3840 ... bench:       8,873 ns/iter (+/- 305)
test p010_to_rgb_row/u8_simd/3840 ... bench:       8,872 ns/iter (+/- 281)
test p010_to_rgb_u16_row/u16_scalar/1280 ... bench:       3,052 ns/iter (+/- 329)
test p010_to_rgb_u16_row/u16_simd/1280 ... bench:       2,901 ns/iter (+/- 56)
test p010_to_rgb_u16_row/u16_scalar/1920 ... bench:       4,364 ns/iter (+/- 247)
test p010_to_rgb_u16_row/u16_simd/1920 ... bench:       4,386 ns/iter (+/- 179)
test p010_to_rgb_u16_row/u16_scalar/3840 ... bench:       8,742 ns/iter (+/- 279)
test p010_to_rgb_u16_row/u16_simd/3840 ... bench:       8,709 ns/iter (+/- 261)
test rgb_to_hsv_row/scalar/1280 ... bench:       3,416 ns/iter (+/- 202)
test rgb_to_hsv_row/simd/1280 ... bench:       3,389 ns/iter (+/- 152)
test rgb_to_hsv_row/scalar/1920 ... bench:       5,118 ns/iter (+/- 256)
test rgb_to_hsv_row/simd/1920 ... bench:       5,063 ns/iter (+/- 172)
test rgb_to_hsv_row/scalar/3840 ... bench:      10,389 ns/iter (+/- 671)
test rgb_to_hsv_row/simd/3840 ... bench:      10,533 ns/iter (+/- 834)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       2,924 ns/iter (+/- 168)
test yuv_420_to_rgb_row/simd/1280 ... bench:       2,936 ns/iter (+/- 403)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       4,392 ns/iter (+/- 271)
test yuv_420_to_rgb_row/simd/1920 ... bench:       4,377 ns/iter (+/- 193)
test yuv_420_to_rgb_row/scalar/3840 ... bench:       9,041 ns/iter (+/- 435)
test yuv_420_to_rgb_row/simd/3840 ... bench:       9,010 ns/iter (+/- 515)
test yuv420p10_to_rgb_row/u8_scalar/1280 ... bench:       3,196 ns/iter (+/- 201)
test yuv420p10_to_rgb_row/u8_simd/1280 ... bench:       3,247 ns/iter (+/- 218)
test yuv420p10_to_rgb_row/u8_scalar/1920 ... bench:       4,795 ns/iter (+/- 159)
test yuv420p10_to_rgb_row/u8_simd/1920 ... bench:       4,794 ns/iter (+/- 98)
test yuv420p10_to_rgb_row/u8_scalar/3840 ... bench:      10,361 ns/iter (+/- 1,000)
test yuv420p10_to_rgb_row/u8_simd/3840 ... bench:      10,396 ns/iter (+/- 1,869)
test yuv420p10_to_rgb_u16_row/u16_scalar/1280 ... bench:       3,280 ns/iter (+/- 235)
test yuv420p10_to_rgb_u16_row/u16_simd/1280 ... bench:       3,440 ns/iter (+/- 217)
test yuv420p10_to_rgb_u16_row/u16_scalar/1920 ... bench:       5,239 ns/iter (+/- 390)
test yuv420p10_to_rgb_u16_row/u16_simd/1920 ... bench:       4,979 ns/iter (+/- 452)
test yuv420p10_to_rgb_u16_row/u16_scalar/3840 ... bench:      10,377 ns/iter (+/- 845)
test yuv420p10_to_rgb_u16_row/u16_simd/3840 ... bench:      10,382 ns/iter (+/- 712)

Benchmark Results for ubuntu-x86_64-avx2-max

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: avx2-max
  • Runner: GitHub Actions 1000009532
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_disable_avx512
  • Date: 2026-04-19 10:56:42 UTC

all

test nv12_to_rgb_row/scalar/1280 ... bench:       4,874 ns/iter (+/- 158)
test nv12_to_rgb_row/simd/1280 ... bench:       1,116 ns/iter (+/- 1)
test nv12_to_rgb_row/scalar/1920 ... bench:       7,361 ns/iter (+/- 16)
test nv12_to_rgb_row/simd/1920 ... bench:       1,674 ns/iter (+/- 1)
test nv12_to_rgb_row/scalar/3840 ... bench:      14,741 ns/iter (+/- 33)
test nv12_to_rgb_row/simd/3840 ... bench:       3,349 ns/iter (+/- 7)
test nv21_to_rgb_row/scalar/1280 ... bench:       5,074 ns/iter (+/- 14)
test nv21_to_rgb_row/simd/1280 ... bench:       1,117 ns/iter (+/- 3)
test nv21_to_rgb_row/scalar/1920 ... bench:       7,350 ns/iter (+/- 28)
test nv21_to_rgb_row/simd/1920 ... bench:       1,674 ns/iter (+/- 2)
test nv21_to_rgb_row/scalar/3840 ... bench:      14,699 ns/iter (+/- 47)
test nv21_to_rgb_row/simd/3840 ... bench:       3,351 ns/iter (+/- 24)
test p010_to_rgb_row/u8_scalar/1280 ... bench:       4,401 ns/iter (+/- 13)
test p010_to_rgb_row/u8_simd/1280 ... bench:       1,170 ns/iter (+/- 1)
test p010_to_rgb_row/u8_scalar/1920 ... bench:       6,518 ns/iter (+/- 98)
test p010_to_rgb_row/u8_simd/1920 ... bench:       1,754 ns/iter (+/- 6)
test p010_to_rgb_row/u8_scalar/3840 ... bench:      13,130 ns/iter (+/- 44)
test p010_to_rgb_row/u8_simd/3840 ... bench:       3,512 ns/iter (+/- 19)
test p010_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,521 ns/iter (+/- 9)
test p010_to_rgb_u16_row/u16_simd/1280 ... bench:       1,216 ns/iter (+/- 2)
test p010_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,804 ns/iter (+/- 18)
test p010_to_rgb_u16_row/u16_simd/1920 ... bench:       1,823 ns/iter (+/- 3)
test p010_to_rgb_u16_row/u16_scalar/3840 ... bench:      13,602 ns/iter (+/- 62)
test p010_to_rgb_u16_row/u16_simd/3840 ... bench:       3,664 ns/iter (+/- 4)
test rgb_to_hsv_row/scalar/1280 ... bench:       4,720 ns/iter (+/- 60)
test rgb_to_hsv_row/simd/1280 ... bench:       2,585 ns/iter (+/- 2)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,079 ns/iter (+/- 72)
test rgb_to_hsv_row/simd/1920 ... bench:       3,878 ns/iter (+/- 11)
test rgb_to_hsv_row/scalar/3840 ... bench:      14,262 ns/iter (+/- 73)
test rgb_to_hsv_row/simd/3840 ... bench:       7,760 ns/iter (+/- 17)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,574 ns/iter (+/- 50)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,004 ns/iter (+/- 8)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       6,923 ns/iter (+/- 51)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,505 ns/iter (+/- 2)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      13,858 ns/iter (+/- 25)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,012 ns/iter (+/- 4)
test yuv420p10_to_rgb_row/u8_scalar/1280 ... bench:       4,683 ns/iter (+/- 21)
test yuv420p10_to_rgb_row/u8_simd/1280 ... bench:         991 ns/iter (+/- 3)
test yuv420p10_to_rgb_row/u8_scalar/1920 ... bench:       7,104 ns/iter (+/- 37)
test yuv420p10_to_rgb_row/u8_simd/1920 ... bench:       1,484 ns/iter (+/- 4)
test yuv420p10_to_rgb_row/u8_scalar/3840 ... bench:      14,323 ns/iter (+/- 78)
test yuv420p10_to_rgb_row/u8_simd/3840 ... bench:       2,968 ns/iter (+/- 7)
test yuv420p10_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,918 ns/iter (+/- 47)
test yuv420p10_to_rgb_u16_row/u16_simd/1280 ... bench:       1,023 ns/iter (+/- 3)
test yuv420p10_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,210 ns/iter (+/- 15)
test yuv420p10_to_rgb_u16_row/u16_simd/1920 ... bench:       1,524 ns/iter (+/- 1)
test yuv420p10_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,459 ns/iter (+/- 27)
test yuv420p10_to_rgb_u16_row/u16_simd/3840 ... bench:       3,064 ns/iter (+/- 11)

Benchmark Results for ubuntu-x86_64-default

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: default
  • Runner: GitHub Actions 1000009526
  • Runner arch (GH): X64
  • RUSTFLAGS: ``
  • Date: 2026-04-19 10:56:12 UTC

all

test nv12_to_rgb_row/scalar/1280 ... bench:       3,354 ns/iter (+/- 35)
test nv12_to_rgb_row/simd/1280 ... bench:         595 ns/iter (+/- 0)
test nv12_to_rgb_row/scalar/1920 ... bench:       5,027 ns/iter (+/- 6)
test nv12_to_rgb_row/simd/1920 ... bench:         894 ns/iter (+/- 0)
test nv12_to_rgb_row/scalar/3840 ... bench:       9,797 ns/iter (+/- 22)
test nv12_to_rgb_row/simd/3840 ... bench:       1,789 ns/iter (+/- 2)
test nv21_to_rgb_row/scalar/1280 ... bench:       3,488 ns/iter (+/- 99)
test nv21_to_rgb_row/simd/1280 ... bench:         602 ns/iter (+/- 0)
test nv21_to_rgb_row/scalar/1920 ... bench:       4,984 ns/iter (+/- 35)
test nv21_to_rgb_row/simd/1920 ... bench:         902 ns/iter (+/- 2)
test nv21_to_rgb_row/scalar/3840 ... bench:      10,011 ns/iter (+/- 71)
test nv21_to_rgb_row/simd/3840 ... bench:       1,803 ns/iter (+/- 4)
test p010_to_rgb_row/u8_scalar/1280 ... bench:       3,772 ns/iter (+/- 59)
test p010_to_rgb_row/u8_simd/1280 ... bench:         567 ns/iter (+/- 0)
test p010_to_rgb_row/u8_scalar/1920 ... bench:       5,494 ns/iter (+/- 14)
test p010_to_rgb_row/u8_simd/1920 ... bench:         851 ns/iter (+/- 1)
test p010_to_rgb_row/u8_scalar/3840 ... bench:      11,009 ns/iter (+/- 86)
test p010_to_rgb_row/u8_simd/3840 ... bench:       1,701 ns/iter (+/- 0)
test p010_to_rgb_u16_row/u16_scalar/1280 ... bench:       3,502 ns/iter (+/- 7)
test p010_to_rgb_u16_row/u16_simd/1280 ... bench:         699 ns/iter (+/- 2)
test p010_to_rgb_u16_row/u16_scalar/1920 ... bench:       5,190 ns/iter (+/- 18)
test p010_to_rgb_u16_row/u16_simd/1920 ... bench:       1,047 ns/iter (+/- 1)
test p010_to_rgb_u16_row/u16_scalar/3840 ... bench:      10,556 ns/iter (+/- 404)
test p010_to_rgb_u16_row/u16_simd/3840 ... bench:       2,122 ns/iter (+/- 2)
test rgb_to_hsv_row/scalar/1280 ... bench:       3,565 ns/iter (+/- 22)
test rgb_to_hsv_row/simd/1280 ... bench:       2,477 ns/iter (+/- 31)
test rgb_to_hsv_row/scalar/1920 ... bench:       5,353 ns/iter (+/- 11)
test rgb_to_hsv_row/simd/1920 ... bench:       3,717 ns/iter (+/- 31)
test rgb_to_hsv_row/scalar/3840 ... bench:      10,713 ns/iter (+/- 29)
test rgb_to_hsv_row/simd/3840 ... bench:       7,436 ns/iter (+/- 33)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       3,516 ns/iter (+/- 21)
test yuv_420_to_rgb_row/simd/1280 ... bench:         563 ns/iter (+/- 0)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       5,345 ns/iter (+/- 30)
test yuv_420_to_rgb_row/simd/1920 ... bench:         841 ns/iter (+/- 0)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      10,656 ns/iter (+/- 25)
test yuv_420_to_rgb_row/simd/3840 ... bench:       1,682 ns/iter (+/- 5)
test yuv420p10_to_rgb_row/u8_scalar/1280 ... bench:       3,653 ns/iter (+/- 22)
test yuv420p10_to_rgb_row/u8_simd/1280 ... bench:         551 ns/iter (+/- 0)
test yuv420p10_to_rgb_row/u8_scalar/1920 ... bench:       5,515 ns/iter (+/- 11)
test yuv420p10_to_rgb_row/u8_simd/1920 ... bench:         825 ns/iter (+/- 0)
test yuv420p10_to_rgb_row/u8_scalar/3840 ... bench:      11,254 ns/iter (+/- 88)
test yuv420p10_to_rgb_row/u8_simd/3840 ... bench:       1,650 ns/iter (+/- 2)
test yuv420p10_to_rgb_u16_row/u16_scalar/1280 ... bench:       3,675 ns/iter (+/- 22)
test yuv420p10_to_rgb_u16_row/u16_simd/1280 ... bench:         684 ns/iter (+/- 1)
test yuv420p10_to_rgb_u16_row/u16_scalar/1920 ... bench:       5,568 ns/iter (+/- 77)
test yuv420p10_to_rgb_u16_row/u16_simd/1920 ... bench:       1,023 ns/iter (+/- 1)
test yuv420p10_to_rgb_u16_row/u16_scalar/3840 ... bench:      11,335 ns/iter (+/- 20)
test yuv420p10_to_rgb_u16_row/u16_simd/3840 ... bench:       2,066 ns/iter (+/- 2)

Benchmark Results for ubuntu-x86_64-native

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: native
  • Runner: GitHub Actions 1000009540
  • Runner arch (GH): X64
  • RUSTFLAGS: ``
  • CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUSTFLAGS: -C target-cpu=native
  • Date: 2026-04-19 10:58:53 UTC

all

test nv12_to_rgb_row/scalar/1280 ... bench:       4,445 ns/iter (+/- 54)
test nv12_to_rgb_row/simd/1280 ... bench:       1,117 ns/iter (+/- 1)
test nv12_to_rgb_row/scalar/1920 ... bench:       6,704 ns/iter (+/- 120)
test nv12_to_rgb_row/simd/1920 ... bench:       1,675 ns/iter (+/- 3)
test nv12_to_rgb_row/scalar/3840 ... bench:      13,417 ns/iter (+/- 35)
test nv12_to_rgb_row/simd/3840 ... bench:       3,355 ns/iter (+/- 5)
test nv21_to_rgb_row/scalar/1280 ... bench:       4,437 ns/iter (+/- 14)
test nv21_to_rgb_row/simd/1280 ... bench:       1,117 ns/iter (+/- 8)
test nv21_to_rgb_row/scalar/1920 ... bench:       6,695 ns/iter (+/- 20)
test nv21_to_rgb_row/simd/1920 ... bench:       1,674 ns/iter (+/- 18)
test nv21_to_rgb_row/scalar/3840 ... bench:      14,001 ns/iter (+/- 70)
test nv21_to_rgb_row/simd/3840 ... bench:       3,353 ns/iter (+/- 3)
test p010_to_rgb_row/u8_scalar/1280 ... bench:       4,790 ns/iter (+/- 193)
test p010_to_rgb_row/u8_simd/1280 ... bench:       1,171 ns/iter (+/- 2)
test p010_to_rgb_row/u8_scalar/1920 ... bench:       7,166 ns/iter (+/- 25)
test p010_to_rgb_row/u8_simd/1920 ... bench:       1,754 ns/iter (+/- 2)
test p010_to_rgb_row/u8_scalar/3840 ... bench:      14,380 ns/iter (+/- 500)
test p010_to_rgb_row/u8_simd/3840 ... bench:       3,527 ns/iter (+/- 4)
test p010_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,630 ns/iter (+/- 26)
test p010_to_rgb_u16_row/u16_simd/1280 ... bench:       1,217 ns/iter (+/- 1)
test p010_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,734 ns/iter (+/- 15)
test p010_to_rgb_u16_row/u16_simd/1920 ... bench:       1,823 ns/iter (+/- 1)
test p010_to_rgb_u16_row/u16_scalar/3840 ... bench:      13,479 ns/iter (+/- 24)
test p010_to_rgb_u16_row/u16_simd/3840 ... bench:       3,656 ns/iter (+/- 3)
test rgb_to_hsv_row/scalar/1280 ... bench:       4,656 ns/iter (+/- 11)
test rgb_to_hsv_row/simd/1280 ... bench:       2,586 ns/iter (+/- 4)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,996 ns/iter (+/- 123)
test rgb_to_hsv_row/simd/1920 ... bench:       3,878 ns/iter (+/- 3)
test rgb_to_hsv_row/scalar/3840 ... bench:      14,064 ns/iter (+/- 99)
test rgb_to_hsv_row/simd/3840 ... bench:       7,758 ns/iter (+/- 9)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,561 ns/iter (+/- 85)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,008 ns/iter (+/- 51)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       6,895 ns/iter (+/- 112)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,511 ns/iter (+/- 74)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      13,768 ns/iter (+/- 27)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,016 ns/iter (+/- 158)
test yuv420p10_to_rgb_row/u8_scalar/1280 ... bench:       4,850 ns/iter (+/- 14)
test yuv420p10_to_rgb_row/u8_simd/1280 ... bench:         991 ns/iter (+/- 6)
test yuv420p10_to_rgb_row/u8_scalar/1920 ... bench:       7,339 ns/iter (+/- 42)
test yuv420p10_to_rgb_row/u8_simd/1920 ... bench:       1,486 ns/iter (+/- 6)
test yuv420p10_to_rgb_row/u8_scalar/3840 ... bench:      14,798 ns/iter (+/- 68)
test yuv420p10_to_rgb_row/u8_simd/3840 ... bench:       2,972 ns/iter (+/- 7)
test yuv420p10_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,820 ns/iter (+/- 28)
test yuv420p10_to_rgb_u16_row/u16_simd/1280 ... bench:       1,024 ns/iter (+/- 5)
test yuv420p10_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,276 ns/iter (+/- 70)
test yuv420p10_to_rgb_u16_row/u16_simd/1920 ... bench:       1,527 ns/iter (+/- 15)
test yuv420p10_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,609 ns/iter (+/- 95)
test yuv420p10_to_rgb_u16_row/u16_simd/3840 ... bench:       3,070 ns/iter (+/- 9)

Benchmark Results for ubuntu-x86_64-scalar

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: scalar
  • Runner: GitHub Actions 1000009513
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_force_scalar
  • Date: 2026-04-19 10:55:33 UTC

all

test nv12_to_rgb_row/scalar/1280 ... bench:       4,740 ns/iter (+/- 153)
test nv12_to_rgb_row/simd/1280 ... bench:       4,738 ns/iter (+/- 21)
test nv12_to_rgb_row/scalar/1920 ... bench:       6,850 ns/iter (+/- 38)
test nv12_to_rgb_row/simd/1920 ... bench:       6,809 ns/iter (+/- 329)
test nv12_to_rgb_row/scalar/3840 ... bench:      13,588 ns/iter (+/- 66)
test nv12_to_rgb_row/simd/3840 ... bench:      13,612 ns/iter (+/- 91)
test nv21_to_rgb_row/scalar/1280 ... bench:       4,496 ns/iter (+/- 11)
test nv21_to_rgb_row/simd/1280 ... bench:       4,705 ns/iter (+/- 82)
test nv21_to_rgb_row/scalar/1920 ... bench:       6,802 ns/iter (+/- 20)
test nv21_to_rgb_row/simd/1920 ... bench:       6,793 ns/iter (+/- 16)
test nv21_to_rgb_row/scalar/3840 ... bench:      13,571 ns/iter (+/- 117)
test nv21_to_rgb_row/simd/3840 ... bench:      13,638 ns/iter (+/- 47)
test p010_to_rgb_row/u8_scalar/1280 ... bench:       4,598 ns/iter (+/- 21)
test p010_to_rgb_row/u8_simd/1280 ... bench:       4,593 ns/iter (+/- 16)
test p010_to_rgb_row/u8_scalar/1920 ... bench:       6,892 ns/iter (+/- 157)
test p010_to_rgb_row/u8_simd/1920 ... bench:       6,939 ns/iter (+/- 20)
test p010_to_rgb_row/u8_scalar/3840 ... bench:      13,934 ns/iter (+/- 83)
test p010_to_rgb_row/u8_simd/3840 ... bench:      13,835 ns/iter (+/- 123)
test p010_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,502 ns/iter (+/- 8)
test p010_to_rgb_u16_row/u16_simd/1280 ... bench:       4,505 ns/iter (+/- 30)
test p010_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,767 ns/iter (+/- 37)
test p010_to_rgb_u16_row/u16_simd/1920 ... bench:       6,772 ns/iter (+/- 117)
test p010_to_rgb_u16_row/u16_scalar/3840 ... bench:      13,521 ns/iter (+/- 41)
test p010_to_rgb_u16_row/u16_simd/3840 ... bench:      13,529 ns/iter (+/- 939)
test rgb_to_hsv_row/scalar/1280 ... bench:       4,574 ns/iter (+/- 21)
test rgb_to_hsv_row/simd/1280 ... bench:       4,571 ns/iter (+/- 84)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,856 ns/iter (+/- 43)
test rgb_to_hsv_row/simd/1920 ... bench:       6,853 ns/iter (+/- 11)
test rgb_to_hsv_row/scalar/3840 ... bench:      13,779 ns/iter (+/- 49)
test rgb_to_hsv_row/simd/3840 ... bench:      13,779 ns/iter (+/- 29)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,818 ns/iter (+/- 40)
test yuv_420_to_rgb_row/simd/1280 ... bench:       4,816 ns/iter (+/- 97)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,262 ns/iter (+/- 17)
test yuv_420_to_rgb_row/simd/1920 ... bench:       7,266 ns/iter (+/- 57)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,567 ns/iter (+/- 40)
test yuv_420_to_rgb_row/simd/3840 ... bench:      14,561 ns/iter (+/- 35)
test yuv420p10_to_rgb_row/u8_scalar/1280 ... bench:       4,816 ns/iter (+/- 101)
test yuv420p10_to_rgb_row/u8_simd/1280 ... bench:       5,006 ns/iter (+/- 105)
test yuv420p10_to_rgb_row/u8_scalar/1920 ... bench:       7,276 ns/iter (+/- 18)
test yuv420p10_to_rgb_row/u8_simd/1920 ... bench:       7,277 ns/iter (+/- 29)
test yuv420p10_to_rgb_row/u8_scalar/3840 ... bench:      14,602 ns/iter (+/- 41)
test yuv420p10_to_rgb_row/u8_simd/3840 ... bench:      14,633 ns/iter (+/- 197)
test yuv420p10_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,620 ns/iter (+/- 20)
test yuv420p10_to_rgb_u16_row/u16_simd/1280 ... bench:       4,627 ns/iter (+/- 10)
test yuv420p10_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,053 ns/iter (+/- 101)
test yuv420p10_to_rgb_u16_row/u16_simd/1920 ... bench:       7,055 ns/iter (+/- 21)
test yuv420p10_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,151 ns/iter (+/- 66)
test yuv420p10_to_rgb_u16_row/u16_simd/3840 ... bench:      14,169 ns/iter (+/- 66)

Benchmark Results for ubuntu-x86_64-sse41-max

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: sse41-max
  • Runner: GitHub Actions 1000009531
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_disable_avx512 --cfg colconv_disable_avx2
  • Date: 2026-04-19 10:56:53 UTC

all

test nv12_to_rgb_row/scalar/1280 ... bench:       4,602 ns/iter (+/- 283)
test nv12_to_rgb_row/simd/1280 ... bench:         885 ns/iter (+/- 4)
test nv12_to_rgb_row/scalar/1920 ... bench:       6,934 ns/iter (+/- 56)
test nv12_to_rgb_row/simd/1920 ... bench:       1,334 ns/iter (+/- 6)
test nv12_to_rgb_row/scalar/3840 ... bench:      13,892 ns/iter (+/- 44)
test nv12_to_rgb_row/simd/3840 ... bench:       2,661 ns/iter (+/- 4)
test nv21_to_rgb_row/scalar/1280 ... bench:       4,631 ns/iter (+/- 18)
test nv21_to_rgb_row/simd/1280 ... bench:         880 ns/iter (+/- 1)
test nv21_to_rgb_row/scalar/1920 ... bench:       6,910 ns/iter (+/- 49)
test nv21_to_rgb_row/simd/1920 ... bench:       1,325 ns/iter (+/- 1)
test nv21_to_rgb_row/scalar/3840 ... bench:      13,896 ns/iter (+/- 42)
test nv21_to_rgb_row/simd/3840 ... bench:       2,644 ns/iter (+/- 9)
test p010_to_rgb_row/u8_scalar/1280 ... bench:       4,766 ns/iter (+/- 71)
test p010_to_rgb_row/u8_simd/1280 ... bench:         945 ns/iter (+/- 2)
test p010_to_rgb_row/u8_scalar/1920 ... bench:       7,122 ns/iter (+/- 52)
test p010_to_rgb_row/u8_simd/1920 ... bench:       1,422 ns/iter (+/- 5)
test p010_to_rgb_row/u8_scalar/3840 ... bench:      14,303 ns/iter (+/- 65)
test p010_to_rgb_row/u8_simd/3840 ... bench:       2,841 ns/iter (+/- 2)
test p010_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,521 ns/iter (+/- 8)
test p010_to_rgb_u16_row/u16_simd/1280 ... bench:       1,154 ns/iter (+/- 9)
test p010_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,807 ns/iter (+/- 32)
test p010_to_rgb_u16_row/u16_simd/1920 ... bench:       1,735 ns/iter (+/- 54)
test p010_to_rgb_u16_row/u16_scalar/3840 ... bench:      13,599 ns/iter (+/- 112)
test p010_to_rgb_u16_row/u16_simd/3840 ... bench:       3,480 ns/iter (+/- 6)
test rgb_to_hsv_row/scalar/1280 ... bench:       4,628 ns/iter (+/- 27)
test rgb_to_hsv_row/simd/1280 ... bench:       2,564 ns/iter (+/- 6)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,940 ns/iter (+/- 23)
test rgb_to_hsv_row/simd/1920 ... bench:       3,852 ns/iter (+/- 7)
test rgb_to_hsv_row/scalar/3840 ... bench:      14,831 ns/iter (+/- 90)
test rgb_to_hsv_row/simd/3840 ... bench:       7,696 ns/iter (+/- 24)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,558 ns/iter (+/- 344)
test yuv_420_to_rgb_row/simd/1280 ... bench:         905 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       6,942 ns/iter (+/- 12)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,360 ns/iter (+/- 54)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      13,841 ns/iter (+/- 260)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,713 ns/iter (+/- 3)
test yuv420p10_to_rgb_row/u8_scalar/1280 ... bench:       4,618 ns/iter (+/- 8)
test yuv420p10_to_rgb_row/u8_simd/1280 ... bench:         841 ns/iter (+/- 0)
test yuv420p10_to_rgb_row/u8_scalar/1920 ... bench:       7,003 ns/iter (+/- 27)
test yuv420p10_to_rgb_row/u8_simd/1920 ... bench:       1,264 ns/iter (+/- 8)
test yuv420p10_to_rgb_row/u8_scalar/3840 ... bench:      14,058 ns/iter (+/- 52)
test yuv420p10_to_rgb_row/u8_simd/3840 ... bench:       2,520 ns/iter (+/- 4)
test yuv420p10_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,826 ns/iter (+/- 41)
test yuv420p10_to_rgb_u16_row/u16_simd/1280 ... bench:       1,103 ns/iter (+/- 2)
test yuv420p10_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,320 ns/iter (+/- 22)
test yuv420p10_to_rgb_u16_row/u16_simd/1920 ... bench:       1,660 ns/iter (+/- 5)
test yuv420p10_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,787 ns/iter (+/- 27)
test yuv420p10_to_rgb_u16_row/u16_simd/3840 ... bench:       3,314 ns/iter (+/- 10)

Benchmark Results for windows-x86_64-default

System Information

  • OS: windows-latest
  • Arch: x86_64
  • SIMD tier: default
  • Runner: GitHub Actions 1000009538
  • Runner arch (GH): X64
  • RUSTFLAGS: ``
  • Date: 2026-04-19 11:00:42 UTC

all

test nv12_to_rgb_row/scalar/1280 ... bench:       3,564 ns/iter (+/- 272)
test nv12_to_rgb_row/simd/1280 ... bench:         767 ns/iter (+/- 80)
test nv12_to_rgb_row/scalar/1920 ... bench:       5,366 ns/iter (+/- 446)
test nv12_to_rgb_row/simd/1920 ... bench:       1,146 ns/iter (+/- 51)
test nv12_to_rgb_row/scalar/3840 ... bench:      10,707 ns/iter (+/- 211)
test nv12_to_rgb_row/simd/3840 ... bench:       2,276 ns/iter (+/- 9)
test nv21_to_rgb_row/scalar/1280 ... bench:       3,794 ns/iter (+/- 147)
test nv21_to_rgb_row/simd/1280 ... bench:         780 ns/iter (+/- 13)
test nv21_to_rgb_row/scalar/1920 ... bench:       5,571 ns/iter (+/- 173)
test nv21_to_rgb_row/simd/1920 ... bench:       1,161 ns/iter (+/- 11)
test nv21_to_rgb_row/scalar/3840 ... bench:      11,023 ns/iter (+/- 295)
test nv21_to_rgb_row/simd/3840 ... bench:       2,419 ns/iter (+/- 321)
test p010_to_rgb_row/u8_scalar/1280 ... bench:       3,781 ns/iter (+/- 116)
test p010_to_rgb_row/u8_simd/1280 ... bench:         679 ns/iter (+/- 3)
test p010_to_rgb_row/u8_scalar/1920 ... bench:       5,798 ns/iter (+/- 552)
test p010_to_rgb_row/u8_simd/1920 ... bench:       1,015 ns/iter (+/- 7)
test p010_to_rgb_row/u8_scalar/3840 ... bench:      11,270 ns/iter (+/- 1,110)
test p010_to_rgb_row/u8_simd/3840 ... bench:       2,040 ns/iter (+/- 569)
test p010_to_rgb_u16_row/u16_scalar/1280 ... bench:       3,983 ns/iter (+/- 494)
test p010_to_rgb_u16_row/u16_simd/1280 ... bench:       1,245 ns/iter (+/- 98)
test p010_to_rgb_u16_row/u16_scalar/1920 ... bench:       5,969 ns/iter (+/- 614)
test p010_to_rgb_u16_row/u16_simd/1920 ... bench:       1,861 ns/iter (+/- 11)
test p010_to_rgb_u16_row/u16_scalar/3840 ... bench:      11,979 ns/iter (+/- 1,144)
test p010_to_rgb_u16_row/u16_simd/3840 ... bench:       3,725 ns/iter (+/- 21)
test rgb_to_hsv_row/scalar/1280 ... bench:       4,465 ns/iter (+/- 1,022)
test rgb_to_hsv_row/simd/1280 ... bench:       4,409 ns/iter (+/- 417)
test rgb_to_hsv_row/scalar/1920 ... bench:       8,629 ns/iter (+/- 816)
test rgb_to_hsv_row/simd/1920 ... bench:       6,611 ns/iter (+/- 462)
test rgb_to_hsv_row/scalar/3840 ... bench:      13,691 ns/iter (+/- 323)
test rgb_to_hsv_row/simd/3840 ... bench:      10,802 ns/iter (+/- 437)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       3,843 ns/iter (+/- 286)
test yuv_420_to_rgb_row/simd/1280 ... bench:         696 ns/iter (+/- 3)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       5,716 ns/iter (+/- 148)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,043 ns/iter (+/- 21)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      11,407 ns/iter (+/- 255)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,076 ns/iter (+/- 8)
test yuv420p10_to_rgb_row/u8_scalar/1280 ... bench:       4,120 ns/iter (+/- 20,234)
test yuv420p10_to_rgb_row/u8_simd/1280 ... bench:         672 ns/iter (+/- 25)
test yuv420p10_to_rgb_row/u8_scalar/1920 ... bench:       6,196 ns/iter (+/- 693)
test yuv420p10_to_rgb_row/u8_simd/1920 ... bench:         986 ns/iter (+/- 10)
test yuv420p10_to_rgb_row/u8_scalar/3840 ... bench:      12,052 ns/iter (+/- 899)
test yuv420p10_to_rgb_row/u8_simd/3840 ... bench:       1,965 ns/iter (+/- 32)
test yuv420p10_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,017 ns/iter (+/- 303)
test yuv420p10_to_rgb_u16_row/u16_simd/1280 ... bench:       1,218 ns/iter (+/- 7)
test yuv420p10_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,070 ns/iter (+/- 392)
test yuv420p10_to_rgb_u16_row/u16_simd/1920 ... bench:       1,825 ns/iter (+/- 9)
test yuv420p10_to_rgb_u16_row/u16_scalar/3840 ... bench:      12,315 ns/iter (+/- 635)
test yuv420p10_to_rgb_u16_row/u16_simd/3840 ... bench:       3,662 ns/iter (+/- 23)

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

This PR expands the crate’s high-bit-depth YUV support by adding 12-bit and 14-bit planar YUV420 (yuv420p12le/yuv420p14le) plus 12-bit semi-planar P012, and by generalizing existing P010/P010 SIMD pathways to const-generic “N-bit” kernels.

Changes:

  • Add new source formats + walkers: Yuv420p12, Yuv420p14, and P012, and wire them into yuv::mod.
  • Generalize P010 and YUV420p10 SIMD/scalar kernels into const-generic *_n_* implementations to support 10/12/14-bit variants.
  • Extend MixedSinker to consume the new formats, and add Criterion benches for the new conversions.

Reviewed changes

Copilot reviewed 17 out of 17 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
src/yuv/yuv420p12.rs Adds 12-bit planar YUV420 row type + walker (yuv420p12_to).
src/yuv/yuv420p14.rs Adds 14-bit planar YUV420 row type + walker (yuv420p14_to).
src/yuv/p012.rs Adds P012 row type + walker (p012_to).
src/yuv/mod.rs Registers and re-exports the new formats/functions.
src/sinker/mixed.rs Adds MixedSinker support for Yuv420p12/Yuv420p14/P012 and new RowSlice variants.
src/row/scalar.rs Generalizes P010 scalar kernels to const-generic p_n_* and updates tests accordingly.
src/row/mod.rs Dispatch layer adds 12/14-bit planar and P012 row conversion APIs and routes to generalized SIMD fns.
src/row/arch/neon.rs Generalizes NEON implementations to const-generic BITS for planar + Pn paths; adds equivalence tests.
src/row/arch/x86_sse41.rs Generalizes SSE4.1 implementations for planar + Pn paths; adds 12/14-bit equivalence tests.
src/row/arch/x86_avx2.rs Generalizes AVX2 implementations for planar + Pn paths; adds 12/14-bit equivalence tests.
src/row/arch/x86_avx512.rs Generalizes AVX-512 implementations for planar + Pn paths; adds 12/14-bit equivalence tests.
src/row/arch/wasm_simd128.rs Generalizes wasm simd128 implementations for planar + Pn paths; adds 12/14-bit equivalence tests.
src/frame.rs Introduces PnFrame<BITS> (BITS=10/12) + P012Frame alias; adds Yuv420p12/14 frame aliases.
benches/yuv_420p12_to_rgb.rs Adds Criterion bench for yuv420p12 row conversions.
benches/yuv_420p14_to_rgb.rs Adds Criterion bench for yuv420p14 row conversions.
benches/p012_to_rgb.rs Adds Criterion bench for P012 row conversions.
Cargo.toml Registers the new bench targets.
Comments suppressed due to low confidence (2)

src/frame.rs:536

  • The doc comment for PnFrame::try_new still refers to constructing a P010Frame and returning P010FrameError, but the function is now generic over the Pn family (P010/P012) and returns PnFrameError. Updating these docs to reference PnFrame/PnFrameError (and mentioning the P010/P012 type aliases) would prevent confusion for callers reading docs via rustdoc.
  /// Constructs a new [`P010Frame`], validating dimensions and plane
  /// lengths. Strides are in `u16` **samples**.
  ///
  /// Returns [`P010FrameError`] if any of:
  /// - `width` or `height` is zero,

src/row/arch/neon.rs:652

  • This section’s doc comment still describes the u16-output semi-planar path in 10-bit-specific terms (e.g. range_params_n::<10, 10>, clamp to [0, 1023], and references to p010_to_rgb_row). Since the implementation is now const-generic over BITS, the docs should be updated to use BITS/(1 << BITS) - 1 and to reference the new generic function names so readers don’t apply the wrong constraints to the 12-bit (P012) instantiation.
/// Same structure as [`p010_to_rgb_row`] up to the chroma compute;
/// the only differences are:
/// - `range_params_n::<10, 10>` → larger scales targeting the 10‑bit
///   output range.
/// - Clamp is explicit min/max to `[0, 1023]` via
///   [`clamp_u10`](crate::row::arch::neon::clamp_u10).
/// - Writes use two `vst3q_u16` calls per 16‑pixel block.

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

Comment thread src/sinker/mixed.rs Outdated
Comment on lines +231 to +232
/// Full‑width Y row of a **12‑bit** planar source ([`Yuv420p12`]).
/// `u16` samples, `width` elements, low‑bit‑packed.
Comment thread src/sinker/mixed.rs
Comment on lines +1332 to +1339
// ---- Yuv420p12 impl ----------------------------------------------------

impl<'a> MixedSinker<'a, Yuv420p12> {
/// Attaches a packed **`u16`** RGB output buffer. Mirrors
/// [`MixedSinker<Yuv420p10>::with_rgb_u16`] but produces 12‑bit
/// output (values in `[0, 4095]` in the low 12 of each `u16`, upper
/// 4 zero). Length is measured in `u16` **elements** (`width ×
/// height × 3`).
Comment thread src/row/arch/neon.rs Outdated
/// # Numerical contract
///
/// Byte‑identical to [`scalar::p010_to_rgb_u16_row`].
/// Byte‑identical to [`scalar::p_n_to_rgb_u16_row::<10>`].
Comment thread src/row/arch/neon.rs
Comment on lines 496 to 499
fn clamp_u10(v: int16x8_t, zero_v: int16x8_t, max_v: int16x8_t) -> uint16x8_t {
unsafe { vreinterpretq_u16_s16(vminq_s16(vmaxq_s16(v, zero_v), max_v)) }
}

@github-actions
Copy link
Copy Markdown

Benchmark Results

Benchmark Results Summary

Date: 2026-04-19 11:36:01 UTC

Benchmark Results for macos-aarch64-neon

System Information

  • OS: macos-latest
  • Arch: aarch64
  • SIMD tier: neon
  • Runner: GitHub Actions 1000009586
  • Runner arch (GH): ARM64
  • RUSTFLAGS: ``
  • Date: 2026-04-19 11:30:42 UTC

all

test nv12_to_rgb_row/scalar/1280 ... bench:       2,729 ns/iter (+/- 38)
test nv12_to_rgb_row/simd/1280 ... bench:         509 ns/iter (+/- 31)
test nv12_to_rgb_row/scalar/1920 ... bench:       4,098 ns/iter (+/- 98)
test nv12_to_rgb_row/simd/1920 ... bench:         759 ns/iter (+/- 18)
test nv12_to_rgb_row/scalar/3840 ... bench:       8,178 ns/iter (+/- 142)
test nv12_to_rgb_row/simd/3840 ... bench:       1,511 ns/iter (+/- 23)
test nv21_to_rgb_row/scalar/1280 ... bench:       2,732 ns/iter (+/- 55)
test nv21_to_rgb_row/simd/1280 ... bench:         509 ns/iter (+/- 17)
test nv21_to_rgb_row/scalar/1920 ... bench:       4,090 ns/iter (+/- 59)
test nv21_to_rgb_row/simd/1920 ... bench:         759 ns/iter (+/- 16)
test nv21_to_rgb_row/scalar/3840 ... bench:       8,175 ns/iter (+/- 85)
test nv21_to_rgb_row/simd/3840 ... bench:       1,511 ns/iter (+/- 27)
test p010_to_rgb_row/u8_scalar/1280 ... bench:       2,740 ns/iter (+/- 64)
test p010_to_rgb_row/u8_simd/1280 ... bench:         478 ns/iter (+/- 9)
test p010_to_rgb_row/u8_scalar/1920 ... bench:       4,104 ns/iter (+/- 66)
test p010_to_rgb_row/u8_simd/1920 ... bench:         720 ns/iter (+/- 10)
test p010_to_rgb_row/u8_scalar/3840 ... bench:       8,213 ns/iter (+/- 372)
test p010_to_rgb_row/u8_simd/3840 ... bench:       1,435 ns/iter (+/- 22)
test p010_to_rgb_u16_row/u16_scalar/1280 ... bench:       2,686 ns/iter (+/- 59)
test p010_to_rgb_u16_row/u16_simd/1280 ... bench:         608 ns/iter (+/- 15)
test p010_to_rgb_u16_row/u16_scalar/1920 ... bench:       4,027 ns/iter (+/- 70)
test p010_to_rgb_u16_row/u16_simd/1920 ... bench:         909 ns/iter (+/- 13)
test p010_to_rgb_u16_row/u16_scalar/3840 ... bench:       8,045 ns/iter (+/- 128)
test p010_to_rgb_u16_row/u16_simd/3840 ... bench:       1,812 ns/iter (+/- 53)
test p012_to_rgb_row/u8_scalar/1280 ... bench:       2,739 ns/iter (+/- 38)
test p012_to_rgb_row/u8_simd/1280 ... bench:         483 ns/iter (+/- 7)
test p012_to_rgb_row/u8_scalar/1920 ... bench:       4,102 ns/iter (+/- 59)
test p012_to_rgb_row/u8_simd/1920 ... bench:         723 ns/iter (+/- 43)
test p012_to_rgb_row/u8_scalar/3840 ... bench:       8,267 ns/iter (+/- 397)
test p012_to_rgb_row/u8_simd/3840 ... bench:       1,435 ns/iter (+/- 24)
test p012_to_rgb_u16_row/u16_scalar/1280 ... bench:       2,685 ns/iter (+/- 76)
test p012_to_rgb_u16_row/u16_simd/1280 ... bench:         604 ns/iter (+/- 11)
test p012_to_rgb_u16_row/u16_scalar/1920 ... bench:       4,026 ns/iter (+/- 68)
test p012_to_rgb_u16_row/u16_simd/1920 ... bench:         909 ns/iter (+/- 12)
test p012_to_rgb_u16_row/u16_scalar/3840 ... bench:       8,045 ns/iter (+/- 164)
test p012_to_rgb_u16_row/u16_simd/3840 ... bench:       1,814 ns/iter (+/- 42)
test rgb_to_hsv_row/scalar/1280 ... bench:       3,125 ns/iter (+/- 63)
test rgb_to_hsv_row/simd/1280 ... bench:       1,451 ns/iter (+/- 22)
test rgb_to_hsv_row/scalar/1920 ... bench:       4,682 ns/iter (+/- 86)
test rgb_to_hsv_row/simd/1920 ... bench:       2,180 ns/iter (+/- 41)
test rgb_to_hsv_row/scalar/3840 ... bench:       9,538 ns/iter (+/- 1,175)
test rgb_to_hsv_row/simd/3840 ... bench:       4,361 ns/iter (+/- 88)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       2,697 ns/iter (+/- 55)
test yuv_420_to_rgb_row/simd/1280 ... bench:         490 ns/iter (+/- 3)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       4,040 ns/iter (+/- 107)
test yuv_420_to_rgb_row/simd/1920 ... bench:         732 ns/iter (+/- 15)
test yuv_420_to_rgb_row/scalar/3840 ... bench:       8,279 ns/iter (+/- 180)
test yuv_420_to_rgb_row/simd/3840 ... bench:       1,459 ns/iter (+/- 19)
test yuv420p10_to_rgb_row/u8_scalar/1280 ... bench:       2,961 ns/iter (+/- 72)
test yuv420p10_to_rgb_row/u8_simd/1280 ... bench:         463 ns/iter (+/- 11)
test yuv420p10_to_rgb_row/u8_scalar/1920 ... bench:       4,424 ns/iter (+/- 86)
test yuv420p10_to_rgb_row/u8_simd/1920 ... bench:         699 ns/iter (+/- 18)
test yuv420p10_to_rgb_row/u8_scalar/3840 ... bench:       8,882 ns/iter (+/- 232)
test yuv420p10_to_rgb_row/u8_simd/3840 ... bench:       1,388 ns/iter (+/- 20)
test yuv420p10_to_rgb_u16_row/u16_scalar/1280 ... bench:       2,953 ns/iter (+/- 66)
test yuv420p10_to_rgb_u16_row/u16_simd/1280 ... bench:         579 ns/iter (+/- 13)
test yuv420p10_to_rgb_u16_row/u16_scalar/1920 ... bench:       4,434 ns/iter (+/- 140)
test yuv420p10_to_rgb_u16_row/u16_simd/1920 ... bench:         873 ns/iter (+/- 15)
test yuv420p10_to_rgb_u16_row/u16_scalar/3840 ... bench:       8,841 ns/iter (+/- 157)
test yuv420p10_to_rgb_u16_row/u16_simd/3840 ... bench:       1,738 ns/iter (+/- 25)
test yuv420p12_to_rgb_row/u8_scalar/1280 ... bench:       2,954 ns/iter (+/- 64)
test yuv420p12_to_rgb_row/u8_simd/1280 ... bench:         462 ns/iter (+/- 2)
test yuv420p12_to_rgb_row/u8_scalar/1920 ... bench:       4,421 ns/iter (+/- 24)
test yuv420p12_to_rgb_row/u8_simd/1920 ... bench:         698 ns/iter (+/- 14)
test yuv420p12_to_rgb_row/u8_scalar/3840 ... bench:       8,837 ns/iter (+/- 99)
test yuv420p12_to_rgb_row/u8_simd/3840 ... bench:       1,389 ns/iter (+/- 32)
test yuv420p12_to_rgb_u16_row/u16_scalar/1280 ... bench:       2,948 ns/iter (+/- 42)
test yuv420p12_to_rgb_u16_row/u16_simd/1280 ... bench:         579 ns/iter (+/- 3)
test yuv420p12_to_rgb_u16_row/u16_scalar/1920 ... bench:       4,419 ns/iter (+/- 29)
test yuv420p12_to_rgb_u16_row/u16_simd/1920 ... bench:         873 ns/iter (+/- 4)
test yuv420p12_to_rgb_u16_row/u16_scalar/3840 ... bench:       8,864 ns/iter (+/- 369)
test yuv420p12_to_rgb_u16_row/u16_simd/3840 ... bench:       1,742 ns/iter (+/- 38)
test yuv420p14_to_rgb_row/u8_scalar/1280 ... bench:       3,033 ns/iter (+/- 46)
test yuv420p14_to_rgb_row/u8_simd/1280 ... bench:         463 ns/iter (+/- 10)
test yuv420p14_to_rgb_row/u8_scalar/1920 ... bench:       4,556 ns/iter (+/- 104)
test yuv420p14_to_rgb_row/u8_simd/1920 ... bench:         697 ns/iter (+/- 11)
test yuv420p14_to_rgb_row/u8_scalar/3840 ... bench:       9,095 ns/iter (+/- 202)
test yuv420p14_to_rgb_row/u8_simd/3840 ... bench:       1,396 ns/iter (+/- 56)
test yuv420p14_to_rgb_u16_row/u16_scalar/1280 ... bench:       2,967 ns/iter (+/- 73)
test yuv420p14_to_rgb_u16_row/u16_simd/1280 ... bench:         581 ns/iter (+/- 14)
test yuv420p14_to_rgb_u16_row/u16_scalar/1920 ... bench:       4,447 ns/iter (+/- 114)
test yuv420p14_to_rgb_u16_row/u16_simd/1920 ... bench:         874 ns/iter (+/- 16)
test yuv420p14_to_rgb_u16_row/u16_scalar/3840 ... bench:       8,879 ns/iter (+/- 252)
test yuv420p14_to_rgb_u16_row/u16_simd/3840 ... bench:       1,740 ns/iter (+/- 34)

Benchmark Results for macos-aarch64-scalar

System Information

  • OS: macos-latest
  • Arch: aarch64
  • SIMD tier: scalar
  • Runner: GitHub Actions 1000009585
  • Runner arch (GH): ARM64
  • RUSTFLAGS: --cfg colconv_force_scalar
  • Date: 2026-04-19 11:31:27 UTC

all

test nv12_to_rgb_row/scalar/1280 ... bench:       2,944 ns/iter (+/- 271)
test nv12_to_rgb_row/simd/1280 ... bench:       2,919 ns/iter (+/- 166)
test nv12_to_rgb_row/scalar/1920 ... bench:       4,424 ns/iter (+/- 332)
test nv12_to_rgb_row/simd/1920 ... bench:       4,504 ns/iter (+/- 539)
test nv12_to_rgb_row/scalar/3840 ... bench:       9,027 ns/iter (+/- 884)
test nv12_to_rgb_row/simd/3840 ... bench:       8,996 ns/iter (+/- 673)
test nv21_to_rgb_row/scalar/1280 ... bench:       2,937 ns/iter (+/- 158)
test nv21_to_rgb_row/simd/1280 ... bench:       3,000 ns/iter (+/- 89)
test nv21_to_rgb_row/scalar/1920 ... bench:       4,457 ns/iter (+/- 271)
test nv21_to_rgb_row/simd/1920 ... bench:       4,545 ns/iter (+/- 411)
test nv21_to_rgb_row/scalar/3840 ... bench:       8,898 ns/iter (+/- 1,358)
test nv21_to_rgb_row/simd/3840 ... bench:       8,971 ns/iter (+/- 322)
test p010_to_rgb_row/u8_scalar/1280 ... bench:       3,008 ns/iter (+/- 77)
test p010_to_rgb_row/u8_simd/1280 ... bench:       2,982 ns/iter (+/- 112)
test p010_to_rgb_row/u8_scalar/1920 ... bench:       4,294 ns/iter (+/- 212)
test p010_to_rgb_row/u8_simd/1920 ... bench:       4,373 ns/iter (+/- 142)
test p010_to_rgb_row/u8_scalar/3840 ... bench:       9,087 ns/iter (+/- 1,277)
test p010_to_rgb_row/u8_simd/3840 ... bench:       8,827 ns/iter (+/- 391)
test p010_to_rgb_u16_row/u16_scalar/1280 ... bench:       2,830 ns/iter (+/- 49)
test p010_to_rgb_u16_row/u16_simd/1280 ... bench:       2,684 ns/iter (+/- 15)
test p010_to_rgb_u16_row/u16_scalar/1920 ... bench:       4,024 ns/iter (+/- 69)
test p010_to_rgb_u16_row/u16_simd/1920 ... bench:       4,027 ns/iter (+/- 132)
test p010_to_rgb_u16_row/u16_scalar/3840 ... bench:       8,044 ns/iter (+/- 200)
test p010_to_rgb_u16_row/u16_simd/3840 ... bench:       8,046 ns/iter (+/- 1,393)
test p012_to_rgb_row/u8_scalar/1280 ... bench:       2,740 ns/iter (+/- 75)
test p012_to_rgb_row/u8_simd/1280 ... bench:       2,738 ns/iter (+/- 14)
test p012_to_rgb_row/u8_scalar/1920 ... bench:       4,102 ns/iter (+/- 34)
test p012_to_rgb_row/u8_simd/1920 ... bench:       4,101 ns/iter (+/- 28)
test p012_to_rgb_row/u8_scalar/3840 ... bench:       8,195 ns/iter (+/- 25)
test p012_to_rgb_row/u8_simd/3840 ... bench:       8,207 ns/iter (+/- 187)
test p012_to_rgb_u16_row/u16_scalar/1280 ... bench:       2,684 ns/iter (+/- 19)
test p012_to_rgb_u16_row/u16_simd/1280 ... bench:       2,685 ns/iter (+/- 10)
test p012_to_rgb_u16_row/u16_scalar/1920 ... bench:       4,025 ns/iter (+/- 49)
test p012_to_rgb_u16_row/u16_simd/1920 ... bench:       4,023 ns/iter (+/- 70)
test p012_to_rgb_u16_row/u16_scalar/3840 ... bench:       8,040 ns/iter (+/- 27)
test p012_to_rgb_u16_row/u16_simd/3840 ... bench:       8,126 ns/iter (+/- 303)
test rgb_to_hsv_row/scalar/1280 ... bench:       3,122 ns/iter (+/- 91)
test rgb_to_hsv_row/simd/1280 ... bench:       3,118 ns/iter (+/- 75)
test rgb_to_hsv_row/scalar/1920 ... bench:       4,677 ns/iter (+/- 134)
test rgb_to_hsv_row/simd/1920 ... bench:       4,671 ns/iter (+/- 77)
test rgb_to_hsv_row/scalar/3840 ... bench:       9,428 ns/iter (+/- 744)
test rgb_to_hsv_row/simd/3840 ... bench:      10,192 ns/iter (+/- 1,416)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       2,891 ns/iter (+/- 629)
test yuv_420_to_rgb_row/simd/1280 ... bench:       3,590 ns/iter (+/- 556)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       4,695 ns/iter (+/- 313)
test yuv_420_to_rgb_row/simd/1920 ... bench:       4,415 ns/iter (+/- 283)
test yuv_420_to_rgb_row/scalar/3840 ... bench:       8,891 ns/iter (+/- 765)
test yuv_420_to_rgb_row/simd/3840 ... bench:       8,895 ns/iter (+/- 789)
test yuv420p10_to_rgb_row/u8_scalar/1280 ... bench:       3,178 ns/iter (+/- 329)
test yuv420p10_to_rgb_row/u8_simd/1280 ... bench:       3,182 ns/iter (+/- 229)
test yuv420p10_to_rgb_row/u8_scalar/1920 ... bench:       4,785 ns/iter (+/- 461)
test yuv420p10_to_rgb_row/u8_simd/1920 ... bench:       5,098 ns/iter (+/- 1,091)
test yuv420p10_to_rgb_row/u8_scalar/3840 ... bench:       9,947 ns/iter (+/- 2,957)
test yuv420p10_to_rgb_row/u8_simd/3840 ... bench:       9,781 ns/iter (+/- 1,791)
test yuv420p10_to_rgb_u16_row/u16_scalar/1280 ... bench:       3,172 ns/iter (+/- 476)
test yuv420p10_to_rgb_u16_row/u16_simd/1280 ... bench:       3,244 ns/iter (+/- 569)
test yuv420p10_to_rgb_u16_row/u16_scalar/1920 ... bench:       5,168 ns/iter (+/- 301)
test yuv420p10_to_rgb_u16_row/u16_simd/1920 ... bench:       5,261 ns/iter (+/- 285)
test yuv420p10_to_rgb_u16_row/u16_scalar/3840 ... bench:      10,432 ns/iter (+/- 797)
test yuv420p10_to_rgb_u16_row/u16_simd/3840 ... bench:      10,114 ns/iter (+/- 1,141)
test yuv420p12_to_rgb_row/u8_scalar/1280 ... bench:       3,361 ns/iter (+/- 445)
test yuv420p12_to_rgb_row/u8_simd/1280 ... bench:       3,161 ns/iter (+/- 61)
test yuv420p12_to_rgb_row/u8_scalar/1920 ... bench:       4,760 ns/iter (+/- 718)
test yuv420p12_to_rgb_row/u8_simd/1920 ... bench:       4,741 ns/iter (+/- 136)
test yuv420p12_to_rgb_row/u8_scalar/3840 ... bench:       9,469 ns/iter (+/- 107)
test yuv420p12_to_rgb_row/u8_simd/3840 ... bench:       9,481 ns/iter (+/- 1,784)
test yuv420p12_to_rgb_u16_row/u16_scalar/1280 ... bench:       3,125 ns/iter (+/- 60)
test yuv420p12_to_rgb_u16_row/u16_simd/1280 ... bench:       3,058 ns/iter (+/- 100)
test yuv420p12_to_rgb_u16_row/u16_scalar/1920 ... bench:       5,125 ns/iter (+/- 462)
test yuv420p12_to_rgb_u16_row/u16_simd/1920 ... bench:       6,258 ns/iter (+/- 2,853)
test yuv420p12_to_rgb_u16_row/u16_scalar/3840 ... bench:       9,912 ns/iter (+/- 1,432)
test yuv420p12_to_rgb_u16_row/u16_simd/3840 ... bench:       9,475 ns/iter (+/- 747)
test yuv420p14_to_rgb_row/u8_scalar/1280 ... bench:       3,249 ns/iter (+/- 289)
test yuv420p14_to_rgb_row/u8_simd/1280 ... bench:       3,037 ns/iter (+/- 61)
test yuv420p14_to_rgb_row/u8_scalar/1920 ... bench:       4,622 ns/iter (+/- 105)
test yuv420p14_to_rgb_row/u8_simd/1920 ... bench:       4,997 ns/iter (+/- 752)
test yuv420p14_to_rgb_row/u8_scalar/3840 ... bench:       9,714 ns/iter (+/- 306)
test yuv420p14_to_rgb_row/u8_simd/3840 ... bench:       9,738 ns/iter (+/- 325)
test yuv420p14_to_rgb_u16_row/u16_scalar/1280 ... bench:       3,017 ns/iter (+/- 124)
test yuv420p14_to_rgb_u16_row/u16_simd/1280 ... bench:       2,958 ns/iter (+/- 99)
test yuv420p14_to_rgb_u16_row/u16_scalar/1920 ... bench:       4,513 ns/iter (+/- 251)
test yuv420p14_to_rgb_u16_row/u16_simd/1920 ... bench:       4,739 ns/iter (+/- 223)
test yuv420p14_to_rgb_u16_row/u16_scalar/3840 ... bench:       8,887 ns/iter (+/- 271)
test yuv420p14_to_rgb_u16_row/u16_simd/3840 ... bench:       9,019 ns/iter (+/- 427)

Benchmark Results for ubuntu-x86_64-avx2-max

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: avx2-max
  • Runner: GitHub Actions 1000009597
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_disable_avx512
  • Date: 2026-04-19 11:34:28 UTC

all

test nv12_to_rgb_row/scalar/1280 ... bench:       4,914 ns/iter (+/- 182)
test nv12_to_rgb_row/simd/1280 ... bench:       1,011 ns/iter (+/- 2)
test nv12_to_rgb_row/scalar/1920 ... bench:       7,184 ns/iter (+/- 83)
test nv12_to_rgb_row/simd/1920 ... bench:       1,517 ns/iter (+/- 2)
test nv12_to_rgb_row/scalar/3840 ... bench:      14,544 ns/iter (+/- 65)
test nv12_to_rgb_row/simd/3840 ... bench:       3,034 ns/iter (+/- 48)
test nv21_to_rgb_row/scalar/1280 ... bench:       4,763 ns/iter (+/- 23)
test nv21_to_rgb_row/simd/1280 ... bench:       1,011 ns/iter (+/- 16)
test nv21_to_rgb_row/scalar/1920 ... bench:       7,187 ns/iter (+/- 79)
test nv21_to_rgb_row/simd/1920 ... bench:       1,517 ns/iter (+/- 1)
test nv21_to_rgb_row/scalar/3840 ... bench:      14,384 ns/iter (+/- 44)
test nv21_to_rgb_row/simd/3840 ... bench:       3,047 ns/iter (+/- 17)
test p010_to_rgb_row/u8_scalar/1280 ... bench:       4,470 ns/iter (+/- 61)
test p010_to_rgb_row/u8_simd/1280 ... bench:       1,056 ns/iter (+/- 1)
test p010_to_rgb_row/u8_scalar/1920 ... bench:       6,682 ns/iter (+/- 28)
test p010_to_rgb_row/u8_simd/1920 ... bench:       1,585 ns/iter (+/- 2)
test p010_to_rgb_row/u8_scalar/3840 ... bench:      13,424 ns/iter (+/- 134)
test p010_to_rgb_row/u8_simd/3840 ... bench:       3,167 ns/iter (+/- 6)
test p010_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,505 ns/iter (+/- 12)
test p010_to_rgb_u16_row/u16_simd/1280 ... bench:       1,145 ns/iter (+/- 1)
test p010_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,706 ns/iter (+/- 46)
test p010_to_rgb_u16_row/u16_simd/1920 ... bench:       1,718 ns/iter (+/- 30)
test p010_to_rgb_u16_row/u16_scalar/3840 ... bench:      13,508 ns/iter (+/- 74)
test p010_to_rgb_u16_row/u16_simd/3840 ... bench:       3,442 ns/iter (+/- 3)
test p012_to_rgb_row/u8_scalar/1280 ... bench:       4,974 ns/iter (+/- 9)
test p012_to_rgb_row/u8_simd/1280 ... bench:       1,056 ns/iter (+/- 23)
test p012_to_rgb_row/u8_scalar/1920 ... bench:       7,180 ns/iter (+/- 41)
test p012_to_rgb_row/u8_simd/1920 ... bench:       1,585 ns/iter (+/- 1)
test p012_to_rgb_row/u8_scalar/3840 ... bench:      14,379 ns/iter (+/- 23)
test p012_to_rgb_row/u8_simd/3840 ... bench:       3,167 ns/iter (+/- 3)
test p012_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,494 ns/iter (+/- 27)
test p012_to_rgb_u16_row/u16_simd/1280 ... bench:       1,145 ns/iter (+/- 3)
test p012_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,715 ns/iter (+/- 99)
test p012_to_rgb_u16_row/u16_simd/1920 ... bench:       1,718 ns/iter (+/- 14)
test p012_to_rgb_u16_row/u16_scalar/3840 ... bench:      13,802 ns/iter (+/- 79)
test p012_to_rgb_u16_row/u16_simd/3840 ... bench:       3,449 ns/iter (+/- 4)
test rgb_to_hsv_row/scalar/1280 ... bench:       4,613 ns/iter (+/- 22)
test rgb_to_hsv_row/simd/1280 ... bench:       2,792 ns/iter (+/- 2)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,916 ns/iter (+/- 18)
test rgb_to_hsv_row/simd/1920 ... bench:       4,182 ns/iter (+/- 10)
test rgb_to_hsv_row/scalar/3840 ... bench:      13,847 ns/iter (+/- 93)
test rgb_to_hsv_row/simd/3840 ... bench:       8,367 ns/iter (+/- 34)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,626 ns/iter (+/- 85)
test yuv_420_to_rgb_row/simd/1280 ... bench:         941 ns/iter (+/- 2)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,017 ns/iter (+/- 13)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,411 ns/iter (+/- 2)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,315 ns/iter (+/- 194)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,819 ns/iter (+/- 20)
test yuv420p10_to_rgb_row/u8_scalar/1280 ... bench:       4,754 ns/iter (+/- 12)
test yuv420p10_to_rgb_row/u8_simd/1280 ... bench:         934 ns/iter (+/- 1)
test yuv420p10_to_rgb_row/u8_scalar/1920 ... bench:       7,164 ns/iter (+/- 114)
test yuv420p10_to_rgb_row/u8_simd/1920 ... bench:       1,375 ns/iter (+/- 12)
test yuv420p10_to_rgb_row/u8_scalar/3840 ... bench:      14,417 ns/iter (+/- 65)
test yuv420p10_to_rgb_row/u8_simd/3840 ... bench:       2,733 ns/iter (+/- 2)
test yuv420p10_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,647 ns/iter (+/- 20)
test yuv420p10_to_rgb_u16_row/u16_simd/1280 ... bench:         997 ns/iter (+/- 1)
test yuv420p10_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,244 ns/iter (+/- 128)
test yuv420p10_to_rgb_u16_row/u16_simd/1920 ... bench:       1,498 ns/iter (+/- 14)
test yuv420p10_to_rgb_u16_row/u16_scalar/3840 ... bench:      15,047 ns/iter (+/- 91)
test yuv420p10_to_rgb_u16_row/u16_simd/3840 ... bench:       3,003 ns/iter (+/- 4)
test yuv420p12_to_rgb_row/u8_scalar/1280 ... bench:       4,721 ns/iter (+/- 14)
test yuv420p12_to_rgb_row/u8_simd/1280 ... bench:         910 ns/iter (+/- 1)
test yuv420p12_to_rgb_row/u8_scalar/1920 ... bench:       7,031 ns/iter (+/- 54)
test yuv420p12_to_rgb_row/u8_simd/1920 ... bench:       1,366 ns/iter (+/- 2)
test yuv420p12_to_rgb_row/u8_scalar/3840 ... bench:      14,064 ns/iter (+/- 271)
test yuv420p12_to_rgb_row/u8_simd/3840 ... bench:       2,726 ns/iter (+/- 5)
test yuv420p12_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,636 ns/iter (+/- 40)
test yuv420p12_to_rgb_u16_row/u16_simd/1280 ... bench:         995 ns/iter (+/- 10)
test yuv420p12_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,365 ns/iter (+/- 83)
test yuv420p12_to_rgb_u16_row/u16_simd/1920 ... bench:       1,494 ns/iter (+/- 2)
test yuv420p12_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,713 ns/iter (+/- 147)
test yuv420p12_to_rgb_u16_row/u16_simd/3840 ... bench:       3,004 ns/iter (+/- 29)
test yuv420p14_to_rgb_row/u8_scalar/1280 ... bench:       4,670 ns/iter (+/- 19)
test yuv420p14_to_rgb_row/u8_simd/1280 ... bench:         910 ns/iter (+/- 4)
test yuv420p14_to_rgb_row/u8_scalar/1920 ... bench:       7,040 ns/iter (+/- 40)
test yuv420p14_to_rgb_row/u8_simd/1920 ... bench:       1,364 ns/iter (+/- 2)
test yuv420p14_to_rgb_row/u8_scalar/3840 ... bench:      14,147 ns/iter (+/- 88)
test yuv420p14_to_rgb_row/u8_simd/3840 ... bench:       2,728 ns/iter (+/- 23)
test yuv420p14_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,697 ns/iter (+/- 22)
test yuv420p14_to_rgb_u16_row/u16_simd/1280 ... bench:         996 ns/iter (+/- 2)
test yuv420p14_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,041 ns/iter (+/- 174)
test yuv420p14_to_rgb_u16_row/u16_simd/1920 ... bench:       1,493 ns/iter (+/- 3)
test yuv420p14_to_rgb_u16_row/u16_scalar/3840 ... bench:      13,871 ns/iter (+/- 20)
test yuv420p14_to_rgb_u16_row/u16_simd/3840 ... bench:       2,995 ns/iter (+/- 2)

Benchmark Results for ubuntu-x86_64-default

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: default
  • Runner: GitHub Actions 1000009576
  • Runner arch (GH): X64
  • RUSTFLAGS: ``
  • Date: 2026-04-19 11:32:05 UTC

all

test nv12_to_rgb_row/scalar/1280 ... bench:       4,455 ns/iter (+/- 30)
test nv12_to_rgb_row/simd/1280 ... bench:       1,116 ns/iter (+/- 1)
test nv12_to_rgb_row/scalar/1920 ... bench:       6,702 ns/iter (+/- 23)
test nv12_to_rgb_row/simd/1920 ... bench:       1,674 ns/iter (+/- 51)
test nv12_to_rgb_row/scalar/3840 ... bench:      13,373 ns/iter (+/- 28)
test nv12_to_rgb_row/simd/3840 ... bench:       3,355 ns/iter (+/- 14)
test nv21_to_rgb_row/scalar/1280 ... bench:       4,637 ns/iter (+/- 109)
test nv21_to_rgb_row/simd/1280 ... bench:       1,117 ns/iter (+/- 1)
test nv21_to_rgb_row/scalar/1920 ... bench:       6,717 ns/iter (+/- 17)
test nv21_to_rgb_row/simd/1920 ... bench:       1,674 ns/iter (+/- 2)
test nv21_to_rgb_row/scalar/3840 ... bench:      13,432 ns/iter (+/- 112)
test nv21_to_rgb_row/simd/3840 ... bench:       3,353 ns/iter (+/- 2)
test p010_to_rgb_row/u8_scalar/1280 ... bench:       4,792 ns/iter (+/- 13)
test p010_to_rgb_row/u8_simd/1280 ... bench:       1,170 ns/iter (+/- 0)
test p010_to_rgb_row/u8_scalar/1920 ... bench:       7,173 ns/iter (+/- 33)
test p010_to_rgb_row/u8_simd/1920 ... bench:       1,754 ns/iter (+/- 10)
test p010_to_rgb_row/u8_scalar/3840 ... bench:      14,389 ns/iter (+/- 196)
test p010_to_rgb_row/u8_simd/3840 ... bench:       3,515 ns/iter (+/- 4)
test p010_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,506 ns/iter (+/- 82)
test p010_to_rgb_u16_row/u16_simd/1280 ... bench:       1,218 ns/iter (+/- 2)
test p010_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,766 ns/iter (+/- 25)
test p010_to_rgb_u16_row/u16_simd/1920 ... bench:       1,823 ns/iter (+/- 10)
test p010_to_rgb_u16_row/u16_scalar/3840 ... bench:      13,473 ns/iter (+/- 156)
test p010_to_rgb_u16_row/u16_simd/3840 ... bench:       3,661 ns/iter (+/- 6)
test p012_to_rgb_row/u8_scalar/1280 ... bench:       4,749 ns/iter (+/- 17)
test p012_to_rgb_row/u8_simd/1280 ... bench:       1,170 ns/iter (+/- 1)
test p012_to_rgb_row/u8_scalar/1920 ... bench:       7,148 ns/iter (+/- 26)
test p012_to_rgb_row/u8_simd/1920 ... bench:       1,754 ns/iter (+/- 1)
test p012_to_rgb_row/u8_scalar/3840 ... bench:      14,317 ns/iter (+/- 120)
test p012_to_rgb_row/u8_simd/3840 ... bench:       3,511 ns/iter (+/- 4)
test p012_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,443 ns/iter (+/- 11)
test p012_to_rgb_u16_row/u16_simd/1280 ... bench:       1,217 ns/iter (+/- 1)
test p012_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,707 ns/iter (+/- 18)
test p012_to_rgb_u16_row/u16_simd/1920 ... bench:       1,822 ns/iter (+/- 2)
test p012_to_rgb_u16_row/u16_scalar/3840 ... bench:      13,408 ns/iter (+/- 116)
test p012_to_rgb_u16_row/u16_simd/3840 ... bench:       3,659 ns/iter (+/- 3)
test rgb_to_hsv_row/scalar/1280 ... bench:       4,659 ns/iter (+/- 17)
test rgb_to_hsv_row/simd/1280 ... bench:       2,587 ns/iter (+/- 3)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,015 ns/iter (+/- 26)
test rgb_to_hsv_row/simd/1920 ... bench:       3,881 ns/iter (+/- 7)
test rgb_to_hsv_row/scalar/3840 ... bench:      14,062 ns/iter (+/- 71)
test rgb_to_hsv_row/simd/3840 ... bench:       7,775 ns/iter (+/- 9)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,547 ns/iter (+/- 9)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,006 ns/iter (+/- 2)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       6,897 ns/iter (+/- 19)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,506 ns/iter (+/- 3)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      13,800 ns/iter (+/- 55)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,013 ns/iter (+/- 60)
test yuv420p10_to_rgb_row/u8_scalar/1280 ... bench:       4,846 ns/iter (+/- 17)
test yuv420p10_to_rgb_row/u8_simd/1280 ... bench:         990 ns/iter (+/- 1)
test yuv420p10_to_rgb_row/u8_scalar/1920 ... bench:       7,337 ns/iter (+/- 13)
test yuv420p10_to_rgb_row/u8_simd/1920 ... bench:       1,484 ns/iter (+/- 1)
test yuv420p10_to_rgb_row/u8_scalar/3840 ... bench:      14,805 ns/iter (+/- 81)
test yuv420p10_to_rgb_row/u8_simd/3840 ... bench:       2,973 ns/iter (+/- 12)
test yuv420p10_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,818 ns/iter (+/- 11)
test yuv420p10_to_rgb_u16_row/u16_simd/1280 ... bench:       1,022 ns/iter (+/- 2)
test yuv420p10_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,280 ns/iter (+/- 85)
test yuv420p10_to_rgb_u16_row/u16_simd/1920 ... bench:       1,527 ns/iter (+/- 4)
test yuv420p10_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,609 ns/iter (+/- 48)
test yuv420p10_to_rgb_u16_row/u16_simd/3840 ... bench:       3,088 ns/iter (+/- 58)
test yuv420p12_to_rgb_row/u8_scalar/1280 ... bench:       4,847 ns/iter (+/- 17)
test yuv420p12_to_rgb_row/u8_simd/1280 ... bench:         990 ns/iter (+/- 2)
test yuv420p12_to_rgb_row/u8_scalar/1920 ... bench:       7,316 ns/iter (+/- 296)
test yuv420p12_to_rgb_row/u8_simd/1920 ... bench:       1,484 ns/iter (+/- 1)
test yuv420p12_to_rgb_row/u8_scalar/3840 ... bench:      14,631 ns/iter (+/- 67)
test yuv420p12_to_rgb_row/u8_simd/3840 ... bench:       2,973 ns/iter (+/- 33)
test yuv420p12_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,789 ns/iter (+/- 22)
test yuv420p12_to_rgb_u16_row/u16_simd/1280 ... bench:       1,025 ns/iter (+/- 3)
test yuv420p12_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,252 ns/iter (+/- 32)
test yuv420p12_to_rgb_u16_row/u16_simd/1920 ... bench:       1,526 ns/iter (+/- 2)
test yuv420p12_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,532 ns/iter (+/- 34)
test yuv420p12_to_rgb_u16_row/u16_simd/3840 ... bench:       3,066 ns/iter (+/- 6)
test yuv420p14_to_rgb_row/u8_scalar/1280 ... bench:       4,733 ns/iter (+/- 49)
test yuv420p14_to_rgb_row/u8_simd/1280 ... bench:         994 ns/iter (+/- 1)
test yuv420p14_to_rgb_row/u8_scalar/1920 ... bench:       7,117 ns/iter (+/- 97)
test yuv420p14_to_rgb_row/u8_simd/1920 ... bench:       1,483 ns/iter (+/- 1)
test yuv420p14_to_rgb_row/u8_scalar/3840 ... bench:      14,325 ns/iter (+/- 28)
test yuv420p14_to_rgb_row/u8_simd/3840 ... bench:       2,969 ns/iter (+/- 2)
test yuv420p14_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,798 ns/iter (+/- 32)
test yuv420p14_to_rgb_u16_row/u16_simd/1280 ... bench:       1,024 ns/iter (+/- 2)
test yuv420p14_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,216 ns/iter (+/- 25)
test yuv420p14_to_rgb_u16_row/u16_simd/1920 ... bench:       1,526 ns/iter (+/- 4)
test yuv420p14_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,501 ns/iter (+/- 126)
test yuv420p14_to_rgb_u16_row/u16_simd/3840 ... bench:       3,079 ns/iter (+/- 6)

Benchmark Results for ubuntu-x86_64-native

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: native
  • Runner: GitHub Actions 1000009574
  • Runner arch (GH): X64
  • RUSTFLAGS: ``
  • CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUSTFLAGS: -C target-cpu=native
  • Date: 2026-04-19 11:32:40 UTC

all

test nv12_to_rgb_row/scalar/1280 ... bench:       4,279 ns/iter (+/- 109)
test nv12_to_rgb_row/simd/1280 ... bench:       1,011 ns/iter (+/- 12)
test nv12_to_rgb_row/scalar/1920 ... bench:       6,356 ns/iter (+/- 37)
test nv12_to_rgb_row/simd/1920 ... bench:       1,516 ns/iter (+/- 63)
test nv12_to_rgb_row/scalar/3840 ... bench:      12,674 ns/iter (+/- 338)
test nv12_to_rgb_row/simd/3840 ... bench:       3,033 ns/iter (+/- 2)
test nv21_to_rgb_row/scalar/1280 ... bench:       4,150 ns/iter (+/- 10)
test nv21_to_rgb_row/simd/1280 ... bench:       1,011 ns/iter (+/- 1)
test nv21_to_rgb_row/scalar/1920 ... bench:       6,318 ns/iter (+/- 201)
test nv21_to_rgb_row/simd/1920 ... bench:       1,518 ns/iter (+/- 6)
test nv21_to_rgb_row/scalar/3840 ... bench:      12,668 ns/iter (+/- 46)
test nv21_to_rgb_row/simd/3840 ... bench:       3,037 ns/iter (+/- 4)
test p010_to_rgb_row/u8_scalar/1280 ... bench:       4,677 ns/iter (+/- 86)
test p010_to_rgb_row/u8_simd/1280 ... bench:       1,056 ns/iter (+/- 26)
test p010_to_rgb_row/u8_scalar/1920 ... bench:       7,021 ns/iter (+/- 16)
test p010_to_rgb_row/u8_simd/1920 ... bench:       1,585 ns/iter (+/- 8)
test p010_to_rgb_row/u8_scalar/3840 ... bench:      14,568 ns/iter (+/- 196)
test p010_to_rgb_row/u8_simd/3840 ... bench:       3,167 ns/iter (+/- 39)
test p010_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,538 ns/iter (+/- 127)
test p010_to_rgb_u16_row/u16_simd/1280 ... bench:       1,146 ns/iter (+/- 1)
test p010_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,685 ns/iter (+/- 31)
test p010_to_rgb_u16_row/u16_simd/1920 ... bench:       1,719 ns/iter (+/- 34)
test p010_to_rgb_u16_row/u16_scalar/3840 ... bench:      13,429 ns/iter (+/- 36)
test p010_to_rgb_u16_row/u16_simd/3840 ... bench:       3,443 ns/iter (+/- 16)
test p012_to_rgb_row/u8_scalar/1280 ... bench:       4,752 ns/iter (+/- 75)
test p012_to_rgb_row/u8_simd/1280 ... bench:       1,056 ns/iter (+/- 0)
test p012_to_rgb_row/u8_scalar/1920 ... bench:       7,052 ns/iter (+/- 33)
test p012_to_rgb_row/u8_simd/1920 ... bench:       1,586 ns/iter (+/- 2)
test p012_to_rgb_row/u8_scalar/3840 ... bench:      14,115 ns/iter (+/- 285)
test p012_to_rgb_row/u8_simd/3840 ... bench:       3,167 ns/iter (+/- 3)
test p012_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,425 ns/iter (+/- 15)
test p012_to_rgb_u16_row/u16_simd/1280 ... bench:       1,145 ns/iter (+/- 4)
test p012_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,688 ns/iter (+/- 17)
test p012_to_rgb_u16_row/u16_simd/1920 ... bench:       1,718 ns/iter (+/- 3)
test p012_to_rgb_u16_row/u16_scalar/3840 ... bench:      13,440 ns/iter (+/- 265)
test p012_to_rgb_u16_row/u16_simd/3840 ... bench:       3,446 ns/iter (+/- 28)
test rgb_to_hsv_row/scalar/1280 ... bench:       4,594 ns/iter (+/- 80)
test rgb_to_hsv_row/simd/1280 ... bench:       2,790 ns/iter (+/- 5)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,888 ns/iter (+/- 38)
test rgb_to_hsv_row/simd/1920 ... bench:       4,182 ns/iter (+/- 48)
test rgb_to_hsv_row/scalar/3840 ... bench:      13,800 ns/iter (+/- 461)
test rgb_to_hsv_row/simd/3840 ... bench:       8,364 ns/iter (+/- 93)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,522 ns/iter (+/- 18)
test yuv_420_to_rgb_row/simd/1280 ... bench:         940 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       6,858 ns/iter (+/- 39)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,409 ns/iter (+/- 2)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      13,802 ns/iter (+/- 317)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,817 ns/iter (+/- 3)
test yuv420p10_to_rgb_row/u8_scalar/1280 ... bench:       4,695 ns/iter (+/- 165)
test yuv420p10_to_rgb_row/u8_simd/1280 ... bench:         912 ns/iter (+/- 1)
test yuv420p10_to_rgb_row/u8_scalar/1920 ... bench:       7,277 ns/iter (+/- 22)
test yuv420p10_to_rgb_row/u8_simd/1920 ... bench:       1,365 ns/iter (+/- 1)
test yuv420p10_to_rgb_row/u8_scalar/3840 ... bench:      14,298 ns/iter (+/- 82)
test yuv420p10_to_rgb_row/u8_simd/3840 ... bench:       2,729 ns/iter (+/- 4)
test yuv420p10_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,707 ns/iter (+/- 16)
test yuv420p10_to_rgb_u16_row/u16_simd/1280 ... bench:         999 ns/iter (+/- 21)
test yuv420p10_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,200 ns/iter (+/- 77)
test yuv420p10_to_rgb_u16_row/u16_simd/1920 ... bench:       1,493 ns/iter (+/- 6)
test yuv420p10_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,404 ns/iter (+/- 38)
test yuv420p10_to_rgb_u16_row/u16_simd/3840 ... bench:       2,993 ns/iter (+/- 31)
test yuv420p12_to_rgb_row/u8_scalar/1280 ... bench:       4,757 ns/iter (+/- 103)
test yuv420p12_to_rgb_row/u8_simd/1280 ... bench:         912 ns/iter (+/- 12)
test yuv420p12_to_rgb_row/u8_scalar/1920 ... bench:       7,194 ns/iter (+/- 94)
test yuv420p12_to_rgb_row/u8_simd/1920 ... bench:       1,365 ns/iter (+/- 50)
test yuv420p12_to_rgb_row/u8_scalar/3840 ... bench:      14,308 ns/iter (+/- 177)
test yuv420p12_to_rgb_row/u8_simd/3840 ... bench:       2,728 ns/iter (+/- 3)
test yuv420p12_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,701 ns/iter (+/- 489)
test yuv420p12_to_rgb_u16_row/u16_simd/1280 ... bench:         996 ns/iter (+/- 4)
test yuv420p12_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,136 ns/iter (+/- 13)
test yuv420p12_to_rgb_u16_row/u16_simd/1920 ... bench:       1,493 ns/iter (+/- 16)
test yuv420p12_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,329 ns/iter (+/- 38)
test yuv420p12_to_rgb_u16_row/u16_simd/3840 ... bench:       3,000 ns/iter (+/- 13)
test yuv420p14_to_rgb_row/u8_scalar/1280 ... bench:       4,763 ns/iter (+/- 48)
test yuv420p14_to_rgb_row/u8_simd/1280 ... bench:         916 ns/iter (+/- 12)
test yuv420p14_to_rgb_row/u8_scalar/1920 ... bench:       7,000 ns/iter (+/- 66)
test yuv420p14_to_rgb_row/u8_simd/1920 ... bench:       1,366 ns/iter (+/- 2)
test yuv420p14_to_rgb_row/u8_scalar/3840 ... bench:      14,278 ns/iter (+/- 186)
test yuv420p14_to_rgb_row/u8_simd/3840 ... bench:       2,731 ns/iter (+/- 4)
test yuv420p14_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,710 ns/iter (+/- 191)
test yuv420p14_to_rgb_u16_row/u16_simd/1280 ... bench:         996 ns/iter (+/- 5)
test yuv420p14_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,109 ns/iter (+/- 91)
test yuv420p14_to_rgb_u16_row/u16_simd/1920 ... bench:       1,492 ns/iter (+/- 2)
test yuv420p14_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,431 ns/iter (+/- 252)
test yuv420p14_to_rgb_u16_row/u16_simd/3840 ... bench:       3,003 ns/iter (+/- 40)

Benchmark Results for ubuntu-x86_64-scalar

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: scalar
  • Runner: GitHub Actions 1000009575
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_force_scalar
  • Date: 2026-04-19 11:32:12 UTC

all

test nv12_to_rgb_row/scalar/1280 ... bench:       4,500 ns/iter (+/- 234)
test nv12_to_rgb_row/simd/1280 ... bench:       4,512 ns/iter (+/- 141)
test nv12_to_rgb_row/scalar/1920 ... bench:       6,828 ns/iter (+/- 78)
test nv12_to_rgb_row/simd/1920 ... bench:       6,812 ns/iter (+/- 21)
test nv12_to_rgb_row/scalar/3840 ... bench:      13,571 ns/iter (+/- 47)
test nv12_to_rgb_row/simd/3840 ... bench:      13,597 ns/iter (+/- 23)
test nv21_to_rgb_row/scalar/1280 ... bench:       4,709 ns/iter (+/- 64)
test nv21_to_rgb_row/simd/1280 ... bench:       4,687 ns/iter (+/- 53)
test nv21_to_rgb_row/scalar/1920 ... bench:       6,794 ns/iter (+/- 26)
test nv21_to_rgb_row/simd/1920 ... bench:       6,803 ns/iter (+/- 26)
test nv21_to_rgb_row/scalar/3840 ... bench:      13,602 ns/iter (+/- 82)
test nv21_to_rgb_row/simd/3840 ... bench:      13,617 ns/iter (+/- 64)
test p010_to_rgb_row/u8_scalar/1280 ... bench:       4,603 ns/iter (+/- 64)
test p010_to_rgb_row/u8_simd/1280 ... bench:       4,594 ns/iter (+/- 30)
test p010_to_rgb_row/u8_scalar/1920 ... bench:       6,895 ns/iter (+/- 51)
test p010_to_rgb_row/u8_simd/1920 ... bench:       6,887 ns/iter (+/- 65)
test p010_to_rgb_row/u8_scalar/3840 ... bench:      13,837 ns/iter (+/- 741)
test p010_to_rgb_row/u8_simd/3840 ... bench:      13,816 ns/iter (+/- 22)
test p010_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,503 ns/iter (+/- 331)
test p010_to_rgb_u16_row/u16_simd/1280 ... bench:       4,507 ns/iter (+/- 115)
test p010_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,762 ns/iter (+/- 33)
test p010_to_rgb_u16_row/u16_simd/1920 ... bench:       6,776 ns/iter (+/- 81)
test p010_to_rgb_u16_row/u16_scalar/3840 ... bench:      13,541 ns/iter (+/- 25)
test p010_to_rgb_u16_row/u16_simd/3840 ... bench:      13,543 ns/iter (+/- 254)
test p012_to_rgb_row/u8_scalar/1280 ... bench:       4,422 ns/iter (+/- 14)
test p012_to_rgb_row/u8_simd/1280 ... bench:       4,417 ns/iter (+/- 10)
test p012_to_rgb_row/u8_scalar/1920 ... bench:       6,700 ns/iter (+/- 27)
test p012_to_rgb_row/u8_simd/1920 ... bench:       6,704 ns/iter (+/- 15)
test p012_to_rgb_row/u8_scalar/3840 ... bench:      13,459 ns/iter (+/- 46)
test p012_to_rgb_row/u8_simd/3840 ... bench:      13,467 ns/iter (+/- 138)
test p012_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,561 ns/iter (+/- 26)
test p012_to_rgb_u16_row/u16_simd/1280 ... bench:       4,525 ns/iter (+/- 12)
test p012_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,835 ns/iter (+/- 342)
test p012_to_rgb_u16_row/u16_simd/1920 ... bench:       6,842 ns/iter (+/- 116)
test p012_to_rgb_u16_row/u16_scalar/3840 ... bench:      13,816 ns/iter (+/- 41)
test p012_to_rgb_u16_row/u16_simd/3840 ... bench:      13,815 ns/iter (+/- 25)
test rgb_to_hsv_row/scalar/1280 ... bench:       4,574 ns/iter (+/- 7)
test rgb_to_hsv_row/simd/1280 ... bench:       4,574 ns/iter (+/- 29)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,850 ns/iter (+/- 16)
test rgb_to_hsv_row/simd/1920 ... bench:       6,854 ns/iter (+/- 53)
test rgb_to_hsv_row/scalar/3840 ... bench:      13,744 ns/iter (+/- 120)
test rgb_to_hsv_row/simd/3840 ... bench:      13,856 ns/iter (+/- 307)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,819 ns/iter (+/- 9)
test yuv_420_to_rgb_row/simd/1280 ... bench:       4,817 ns/iter (+/- 18)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,276 ns/iter (+/- 23)
test yuv_420_to_rgb_row/simd/1920 ... bench:       7,279 ns/iter (+/- 56)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,583 ns/iter (+/- 57)
test yuv_420_to_rgb_row/simd/3840 ... bench:      14,581 ns/iter (+/- 26)
test yuv420p10_to_rgb_row/u8_scalar/1280 ... bench:       4,819 ns/iter (+/- 19)
test yuv420p10_to_rgb_row/u8_simd/1280 ... bench:       5,013 ns/iter (+/- 31)
test yuv420p10_to_rgb_row/u8_scalar/1920 ... bench:       7,287 ns/iter (+/- 63)
test yuv420p10_to_rgb_row/u8_simd/1920 ... bench:       7,288 ns/iter (+/- 28)
test yuv420p10_to_rgb_row/u8_scalar/3840 ... bench:      14,655 ns/iter (+/- 80)
test yuv420p10_to_rgb_row/u8_simd/3840 ... bench:      14,655 ns/iter (+/- 118)
test yuv420p10_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,626 ns/iter (+/- 155)
test yuv420p10_to_rgb_u16_row/u16_simd/1280 ... bench:       4,629 ns/iter (+/- 13)
test yuv420p10_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,032 ns/iter (+/- 17)
test yuv420p10_to_rgb_u16_row/u16_simd/1920 ... bench:       7,039 ns/iter (+/- 25)
test yuv420p10_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,144 ns/iter (+/- 82)
test yuv420p10_to_rgb_u16_row/u16_simd/3840 ... bench:      14,116 ns/iter (+/- 813)
test yuv420p12_to_rgb_row/u8_scalar/1280 ... bench:       4,807 ns/iter (+/- 53)
test yuv420p12_to_rgb_row/u8_simd/1280 ... bench:       4,810 ns/iter (+/- 26)
test yuv420p12_to_rgb_row/u8_scalar/1920 ... bench:       7,277 ns/iter (+/- 44)
test yuv420p12_to_rgb_row/u8_simd/1920 ... bench:       7,278 ns/iter (+/- 54)
test yuv420p12_to_rgb_row/u8_scalar/3840 ... bench:      14,577 ns/iter (+/- 506)
test yuv420p12_to_rgb_row/u8_simd/3840 ... bench:      14,593 ns/iter (+/- 187)
test yuv420p12_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,657 ns/iter (+/- 8)
test yuv420p12_to_rgb_u16_row/u16_simd/1280 ... bench:       4,659 ns/iter (+/- 328)
test yuv420p12_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,044 ns/iter (+/- 21)
test yuv420p12_to_rgb_u16_row/u16_simd/1920 ... bench:       7,039 ns/iter (+/- 58)
test yuv420p12_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,056 ns/iter (+/- 105)
test yuv420p12_to_rgb_u16_row/u16_simd/3840 ... bench:      14,050 ns/iter (+/- 48)
test yuv420p14_to_rgb_row/u8_scalar/1280 ... bench:       4,906 ns/iter (+/- 29)
test yuv420p14_to_rgb_row/u8_simd/1280 ... bench:       4,913 ns/iter (+/- 30)
test yuv420p14_to_rgb_row/u8_scalar/1920 ... bench:       7,367 ns/iter (+/- 79)
test yuv420p14_to_rgb_row/u8_simd/1920 ... bench:       7,365 ns/iter (+/- 80)
test yuv420p14_to_rgb_row/u8_scalar/3840 ... bench:      14,800 ns/iter (+/- 38)
test yuv420p14_to_rgb_row/u8_simd/3840 ... bench:      14,817 ns/iter (+/- 31)
test yuv420p14_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,839 ns/iter (+/- 16)
test yuv420p14_to_rgb_u16_row/u16_simd/1280 ... bench:       4,838 ns/iter (+/- 17)
test yuv420p14_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,281 ns/iter (+/- 11)
test yuv420p14_to_rgb_u16_row/u16_simd/1920 ... bench:       7,282 ns/iter (+/- 54)
test yuv420p14_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,592 ns/iter (+/- 42)
test yuv420p14_to_rgb_u16_row/u16_simd/3840 ... bench:      14,590 ns/iter (+/- 109)

Benchmark Results for ubuntu-x86_64-sse41-max

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: sse41-max
  • Runner: GitHub Actions 1000009577
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_disable_avx512 --cfg colconv_disable_avx2
  • Date: 2026-04-19 11:32:32 UTC

all

test nv12_to_rgb_row/scalar/1280 ... bench:       4,636 ns/iter (+/- 101)
test nv12_to_rgb_row/simd/1280 ... bench:         885 ns/iter (+/- 22)
test nv12_to_rgb_row/scalar/1920 ... bench:       6,926 ns/iter (+/- 72)
test nv12_to_rgb_row/simd/1920 ... bench:       1,334 ns/iter (+/- 2)
test nv12_to_rgb_row/scalar/3840 ... bench:      13,848 ns/iter (+/- 93)
test nv12_to_rgb_row/simd/3840 ... bench:       2,661 ns/iter (+/- 2)
test nv21_to_rgb_row/scalar/1280 ... bench:       4,595 ns/iter (+/- 147)
test nv21_to_rgb_row/simd/1280 ... bench:         880 ns/iter (+/- 1)
test nv21_to_rgb_row/scalar/1920 ... bench:       6,922 ns/iter (+/- 51)
test nv21_to_rgb_row/simd/1920 ... bench:       1,323 ns/iter (+/- 63)
test nv21_to_rgb_row/scalar/3840 ... bench:      13,841 ns/iter (+/- 69)
test nv21_to_rgb_row/simd/3840 ... bench:       2,645 ns/iter (+/- 50)
test p010_to_rgb_row/u8_scalar/1280 ... bench:       4,765 ns/iter (+/- 39)
test p010_to_rgb_row/u8_simd/1280 ... bench:         945 ns/iter (+/- 1)
test p010_to_rgb_row/u8_scalar/1920 ... bench:       7,143 ns/iter (+/- 65)
test p010_to_rgb_row/u8_simd/1920 ... bench:       1,425 ns/iter (+/- 1)
test p010_to_rgb_row/u8_scalar/3840 ... bench:      14,277 ns/iter (+/- 41)
test p010_to_rgb_row/u8_simd/3840 ... bench:       2,843 ns/iter (+/- 59)
test p010_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,516 ns/iter (+/- 19)
test p010_to_rgb_u16_row/u16_simd/1280 ... bench:       1,153 ns/iter (+/- 3)
test p010_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,806 ns/iter (+/- 36)
test p010_to_rgb_u16_row/u16_simd/1920 ... bench:       1,735 ns/iter (+/- 2)
test p010_to_rgb_u16_row/u16_scalar/3840 ... bench:      13,600 ns/iter (+/- 50)
test p010_to_rgb_u16_row/u16_simd/3840 ... bench:       3,480 ns/iter (+/- 5)
test p012_to_rgb_row/u8_scalar/1280 ... bench:       4,613 ns/iter (+/- 46)
test p012_to_rgb_row/u8_simd/1280 ... bench:         938 ns/iter (+/- 0)
test p012_to_rgb_row/u8_scalar/1920 ... bench:       6,962 ns/iter (+/- 27)
test p012_to_rgb_row/u8_simd/1920 ... bench:       1,414 ns/iter (+/- 1)
test p012_to_rgb_row/u8_scalar/3840 ... bench:      13,912 ns/iter (+/- 33)
test p012_to_rgb_row/u8_simd/3840 ... bench:       2,825 ns/iter (+/- 46)
test p012_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,495 ns/iter (+/- 24)
test p012_to_rgb_u16_row/u16_simd/1280 ... bench:       1,165 ns/iter (+/- 2)
test p012_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,782 ns/iter (+/- 60)
test p012_to_rgb_u16_row/u16_simd/1920 ... bench:       1,755 ns/iter (+/- 4)
test p012_to_rgb_u16_row/u16_scalar/3840 ... bench:      13,601 ns/iter (+/- 56)
test p012_to_rgb_u16_row/u16_simd/3840 ... bench:       3,519 ns/iter (+/- 14)
test rgb_to_hsv_row/scalar/1280 ... bench:       4,627 ns/iter (+/- 27)
test rgb_to_hsv_row/simd/1280 ... bench:       2,562 ns/iter (+/- 3)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,938 ns/iter (+/- 164)
test rgb_to_hsv_row/simd/1920 ... bench:       3,850 ns/iter (+/- 7)
test rgb_to_hsv_row/scalar/3840 ... bench:      13,906 ns/iter (+/- 103)
test rgb_to_hsv_row/simd/3840 ... bench:       7,693 ns/iter (+/- 9)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,584 ns/iter (+/- 218)
test yuv_420_to_rgb_row/simd/1280 ... bench:         904 ns/iter (+/- 3)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       6,940 ns/iter (+/- 18)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,361 ns/iter (+/- 39)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      13,843 ns/iter (+/- 394)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,713 ns/iter (+/- 133)
test yuv420p10_to_rgb_row/u8_scalar/1280 ... bench:       4,637 ns/iter (+/- 125)
test yuv420p10_to_rgb_row/u8_simd/1280 ... bench:         842 ns/iter (+/- 2)
test yuv420p10_to_rgb_row/u8_scalar/1920 ... bench:       6,998 ns/iter (+/- 100)
test yuv420p10_to_rgb_row/u8_simd/1920 ... bench:       1,263 ns/iter (+/- 2)
test yuv420p10_to_rgb_row/u8_scalar/3840 ... bench:      14,056 ns/iter (+/- 87)
test yuv420p10_to_rgb_row/u8_simd/3840 ... bench:       2,519 ns/iter (+/- 14)
test yuv420p10_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,825 ns/iter (+/- 40)
test yuv420p10_to_rgb_u16_row/u16_simd/1280 ... bench:       1,103 ns/iter (+/- 2)
test yuv420p10_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,316 ns/iter (+/- 73)
test yuv420p10_to_rgb_u16_row/u16_simd/1920 ... bench:       1,658 ns/iter (+/- 45)
test yuv420p10_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,805 ns/iter (+/- 45)
test yuv420p10_to_rgb_u16_row/u16_simd/3840 ... bench:       3,315 ns/iter (+/- 5)
test yuv420p12_to_rgb_row/u8_scalar/1280 ... bench:       4,632 ns/iter (+/- 128)
test yuv420p12_to_rgb_row/u8_simd/1280 ... bench:         819 ns/iter (+/- 2)
test yuv420p12_to_rgb_row/u8_scalar/1920 ... bench:       6,997 ns/iter (+/- 23)
test yuv420p12_to_rgb_row/u8_simd/1920 ... bench:       1,233 ns/iter (+/- 1)
test yuv420p12_to_rgb_row/u8_scalar/3840 ... bench:      14,023 ns/iter (+/- 39)
test yuv420p12_to_rgb_row/u8_simd/3840 ... bench:       2,457 ns/iter (+/- 3)
test yuv420p12_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,779 ns/iter (+/- 46)
test yuv420p12_to_rgb_u16_row/u16_simd/1280 ... bench:       1,103 ns/iter (+/- 145)
test yuv420p12_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,225 ns/iter (+/- 71)
test yuv420p12_to_rgb_u16_row/u16_simd/1920 ... bench:       1,658 ns/iter (+/- 2)
test yuv420p12_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,482 ns/iter (+/- 45)
test yuv420p12_to_rgb_u16_row/u16_simd/3840 ... bench:       3,312 ns/iter (+/- 4)
test yuv420p14_to_rgb_row/u8_scalar/1280 ... bench:       4,812 ns/iter (+/- 60)
test yuv420p14_to_rgb_row/u8_simd/1280 ... bench:         820 ns/iter (+/- 2)
test yuv420p14_to_rgb_row/u8_scalar/1920 ... bench:       7,522 ns/iter (+/- 141)
test yuv420p14_to_rgb_row/u8_simd/1920 ... bench:       1,232 ns/iter (+/- 67)
test yuv420p14_to_rgb_row/u8_scalar/3840 ... bench:      14,522 ns/iter (+/- 1,322)
test yuv420p14_to_rgb_row/u8_simd/3840 ... bench:       2,457 ns/iter (+/- 8)
test yuv420p14_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,576 ns/iter (+/- 21)
test yuv420p14_to_rgb_u16_row/u16_simd/1280 ... bench:       1,103 ns/iter (+/- 7)
test yuv420p14_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,900 ns/iter (+/- 43)
test yuv420p14_to_rgb_u16_row/u16_simd/1920 ... bench:       1,658 ns/iter (+/- 159)
test yuv420p14_to_rgb_u16_row/u16_scalar/3840 ... bench:      13,840 ns/iter (+/- 401)
test yuv420p14_to_rgb_u16_row/u16_simd/3840 ... bench:       3,314 ns/iter (+/- 10)

Benchmark Results for windows-x86_64-default

System Information

  • OS: windows-latest
  • Arch: x86_64
  • SIMD tier: default
  • Runner: GitHub Actions 1000009582
  • Runner arch (GH): X64
  • RUSTFLAGS: ``
  • Date: 2026-04-19 11:35:34 UTC

all

test nv12_to_rgb_row/scalar/1280 ... bench:       4,415 ns/iter (+/- 47)
test nv12_to_rgb_row/simd/1280 ... bench:       1,018 ns/iter (+/- 11)
test nv12_to_rgb_row/scalar/1920 ... bench:       6,683 ns/iter (+/- 784)
test nv12_to_rgb_row/simd/1920 ... bench:       1,536 ns/iter (+/- 11)
test nv12_to_rgb_row/scalar/3840 ... bench:      13,271 ns/iter (+/- 235)
test nv12_to_rgb_row/simd/3840 ... bench:       3,043 ns/iter (+/- 9)
test nv21_to_rgb_row/scalar/1280 ... bench:       4,342 ns/iter (+/- 164)
test nv21_to_rgb_row/simd/1280 ... bench:       1,057 ns/iter (+/- 34)
test nv21_to_rgb_row/scalar/1920 ... bench:       6,597 ns/iter (+/- 329)
test nv21_to_rgb_row/simd/1920 ... bench:       1,528 ns/iter (+/- 5)
test nv21_to_rgb_row/scalar/3840 ... bench:      13,195 ns/iter (+/- 2,304)
test nv21_to_rgb_row/simd/3840 ... bench:       3,045 ns/iter (+/- 32)
test p010_to_rgb_row/u8_scalar/1280 ... bench:       4,588 ns/iter (+/- 82)
test p010_to_rgb_row/u8_simd/1280 ... bench:       1,100 ns/iter (+/- 200)
test p010_to_rgb_row/u8_scalar/1920 ... bench:       6,988 ns/iter (+/- 437)
test p010_to_rgb_row/u8_simd/1920 ... bench:       1,595 ns/iter (+/- 21)
test p010_to_rgb_row/u8_scalar/3840 ... bench:      13,990 ns/iter (+/- 809)
test p010_to_rgb_row/u8_simd/3840 ... bench:       3,187 ns/iter (+/- 31)
test p010_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,543 ns/iter (+/- 333)
test p010_to_rgb_u16_row/u16_simd/1280 ... bench:       1,150 ns/iter (+/- 15)
test p010_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,826 ns/iter (+/- 979)
test p010_to_rgb_u16_row/u16_simd/1920 ... bench:       1,730 ns/iter (+/- 26)
test p010_to_rgb_u16_row/u16_scalar/3840 ... bench:      13,709 ns/iter (+/- 1,589)
test p010_to_rgb_u16_row/u16_simd/3840 ... bench:       3,494 ns/iter (+/- 63)
test p012_to_rgb_row/u8_scalar/1280 ... bench:       4,711 ns/iter (+/- 504)
test p012_to_rgb_row/u8_simd/1280 ... bench:       1,062 ns/iter (+/- 6)
test p012_to_rgb_row/u8_scalar/1920 ... bench:       7,127 ns/iter (+/- 556)
test p012_to_rgb_row/u8_simd/1920 ... bench:       1,596 ns/iter (+/- 21)
test p012_to_rgb_row/u8_scalar/3840 ... bench:      17,567 ns/iter (+/- 1,722)
test p012_to_rgb_row/u8_simd/3840 ... bench:       3,750 ns/iter (+/- 280)
test p012_to_rgb_u16_row/u16_scalar/1280 ... bench:       5,865 ns/iter (+/- 677)
test p012_to_rgb_u16_row/u16_simd/1280 ... bench:       1,153 ns/iter (+/- 16)
test p012_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,989 ns/iter (+/- 1,175)
test p012_to_rgb_u16_row/u16_simd/1920 ... bench:       1,741 ns/iter (+/- 37)
test p012_to_rgb_u16_row/u16_scalar/3840 ... bench:      13,943 ns/iter (+/- 179)
test p012_to_rgb_u16_row/u16_simd/3840 ... bench:       3,456 ns/iter (+/- 43)
test rgb_to_hsv_row/scalar/1280 ... bench:       4,468 ns/iter (+/- 160)
test rgb_to_hsv_row/simd/1280 ... bench:       5,076 ns/iter (+/- 16,202)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,824 ns/iter (+/- 1,856)
test rgb_to_hsv_row/simd/1920 ... bench:       4,208 ns/iter (+/- 113)
test rgb_to_hsv_row/scalar/3840 ... bench:      13,445 ns/iter (+/- 735)
test rgb_to_hsv_row/simd/3840 ... bench:       8,417 ns/iter (+/- 259)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,618 ns/iter (+/- 383)
test yuv_420_to_rgb_row/simd/1280 ... bench:         953 ns/iter (+/- 9)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       6,956 ns/iter (+/- 407)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,425 ns/iter (+/- 16)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,013 ns/iter (+/- 869)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,837 ns/iter (+/- 30)
test yuv420p10_to_rgb_row/u8_scalar/1280 ... bench:       4,533 ns/iter (+/- 337)
test yuv420p10_to_rgb_row/u8_simd/1280 ... bench:         930 ns/iter (+/- 48)
test yuv420p10_to_rgb_row/u8_scalar/1920 ... bench:       6,890 ns/iter (+/- 487)
test yuv420p10_to_rgb_row/u8_simd/1920 ... bench:       1,385 ns/iter (+/- 71)
test yuv420p10_to_rgb_row/u8_scalar/3840 ... bench:      13,691 ns/iter (+/- 667)
test yuv420p10_to_rgb_row/u8_simd/3840 ... bench:       2,749 ns/iter (+/- 149)
test yuv420p10_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,717 ns/iter (+/- 240)
test yuv420p10_to_rgb_u16_row/u16_simd/1280 ... bench:       1,014 ns/iter (+/- 15)
test yuv420p10_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,135 ns/iter (+/- 74)
test yuv420p10_to_rgb_u16_row/u16_simd/1920 ... bench:       1,521 ns/iter (+/- 9)
test yuv420p10_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,433 ns/iter (+/- 187)
test yuv420p10_to_rgb_u16_row/u16_simd/3840 ... bench:       3,017 ns/iter (+/- 10)
test yuv420p12_to_rgb_row/u8_scalar/1280 ... bench:       4,704 ns/iter (+/- 66)
test yuv420p12_to_rgb_row/u8_simd/1280 ... bench:         922 ns/iter (+/- 7)
test yuv420p12_to_rgb_row/u8_scalar/1920 ... bench:       7,180 ns/iter (+/- 98)
test yuv420p12_to_rgb_row/u8_simd/1920 ... bench:       1,382 ns/iter (+/- 5)
test yuv420p12_to_rgb_row/u8_scalar/3840 ... bench:      14,245 ns/iter (+/- 275)
test yuv420p12_to_rgb_row/u8_simd/3840 ... bench:       2,740 ns/iter (+/- 5)
test yuv420p12_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,602 ns/iter (+/- 84)
test yuv420p12_to_rgb_u16_row/u16_simd/1280 ... bench:       1,006 ns/iter (+/- 2)
test yuv420p12_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,957 ns/iter (+/- 89)
test yuv420p12_to_rgb_u16_row/u16_simd/1920 ... bench:       1,509 ns/iter (+/- 6)
test yuv420p12_to_rgb_u16_row/u16_scalar/3840 ... bench:      13,915 ns/iter (+/- 186)
test yuv420p12_to_rgb_u16_row/u16_simd/3840 ... bench:       3,072 ns/iter (+/- 40)
test yuv420p14_to_rgb_row/u8_scalar/1280 ... bench:       4,649 ns/iter (+/- 178)
test yuv420p14_to_rgb_row/u8_simd/1280 ... bench:         949 ns/iter (+/- 16)
test yuv420p14_to_rgb_row/u8_scalar/1920 ... bench:       6,912 ns/iter (+/- 103)
test yuv420p14_to_rgb_row/u8_simd/1920 ... bench:       1,384 ns/iter (+/- 13)
test yuv420p14_to_rgb_row/u8_scalar/3840 ... bench:      13,877 ns/iter (+/- 175)
test yuv420p14_to_rgb_row/u8_simd/3840 ... bench:       2,752 ns/iter (+/- 22)
test yuv420p14_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,688 ns/iter (+/- 51)
test yuv420p14_to_rgb_u16_row/u16_simd/1280 ... bench:       1,004 ns/iter (+/- 10)
test yuv420p14_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,072 ns/iter (+/- 66)
test yuv420p14_to_rgb_u16_row/u16_simd/1920 ... bench:       1,506 ns/iter (+/- 9)
test yuv420p14_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,174 ns/iter (+/- 207)
test yuv420p14_to_rgb_u16_row/u16_simd/3840 ... bench:       3,019 ns/iter (+/- 32)

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{12, 14}): impl yuv420p{12, 14} pixel format feat(yuv): add yuv420p12/14 + P012 via const-generic BITS Apr 19, 2026
@uqio uqio merged commit 5403ddb into main Apr 19, 2026
51 of 66 checks passed
@uqio uqio deleted the feat/yuv420p12-yuv420p14-p012 branch April 19, 2026 12:06
@github-actions
Copy link
Copy Markdown

Benchmark Results

Benchmark Results Summary

Date: 2026-04-19 12:17:27 UTC

Benchmark Results for macos-aarch64-neon

System Information

  • OS: macos-latest
  • Arch: aarch64
  • SIMD tier: neon
  • Runner: GitHub Actions 1000009670
  • Runner arch (GH): ARM64
  • RUSTFLAGS: ``
  • Date: 2026-04-19 12:14:30 UTC

all

test nv12_to_rgb_row/scalar/1280 ... bench:       3,713 ns/iter (+/- 1,634)
test nv12_to_rgb_row/simd/1280 ... bench:         584 ns/iter (+/- 38)
test nv12_to_rgb_row/scalar/1920 ... bench:       5,789 ns/iter (+/- 2,458)
test nv12_to_rgb_row/simd/1920 ... bench:       1,050 ns/iter (+/- 503)
test nv12_to_rgb_row/scalar/3840 ... bench:      10,557 ns/iter (+/- 2,146)
test nv12_to_rgb_row/simd/3840 ... bench:       1,819 ns/iter (+/- 311)
test nv21_to_rgb_row/scalar/1280 ... bench:       3,750 ns/iter (+/- 622)
test nv21_to_rgb_row/simd/1280 ... bench:         685 ns/iter (+/- 128)
test nv21_to_rgb_row/scalar/1920 ... bench:       5,683 ns/iter (+/- 889)
test nv21_to_rgb_row/simd/1920 ... bench:       1,008 ns/iter (+/- 245)
test nv21_to_rgb_row/scalar/3840 ... bench:      10,641 ns/iter (+/- 2,317)
test nv21_to_rgb_row/simd/3840 ... bench:       2,018 ns/iter (+/- 539)
test p010_to_rgb_row/u8_scalar/1280 ... bench:       3,779 ns/iter (+/- 1,106)
test p010_to_rgb_row/u8_simd/1280 ... bench:         661 ns/iter (+/- 117)
test p010_to_rgb_row/u8_scalar/1920 ... bench:       5,698 ns/iter (+/- 1,168)
test p010_to_rgb_row/u8_simd/1920 ... bench:         901 ns/iter (+/- 219)
test p010_to_rgb_row/u8_scalar/3840 ... bench:      11,617 ns/iter (+/- 1,849)
test p010_to_rgb_row/u8_simd/3840 ... bench:       1,873 ns/iter (+/- 592)
test p010_to_rgb_u16_row/u16_scalar/1280 ... bench:       3,822 ns/iter (+/- 1,017)
test p010_to_rgb_u16_row/u16_simd/1280 ... bench:         894 ns/iter (+/- 386)
test p010_to_rgb_u16_row/u16_scalar/1920 ... bench:       5,398 ns/iter (+/- 1,179)
test p010_to_rgb_u16_row/u16_simd/1920 ... bench:       1,091 ns/iter (+/- 154)
test p010_to_rgb_u16_row/u16_scalar/3840 ... bench:      11,368 ns/iter (+/- 2,910)
test p010_to_rgb_u16_row/u16_simd/3840 ... bench:       2,541 ns/iter (+/- 686)
test p012_to_rgb_row/u8_scalar/1280 ... bench:       3,949 ns/iter (+/- 713)
test p012_to_rgb_row/u8_simd/1280 ... bench:         639 ns/iter (+/- 114)
test p012_to_rgb_row/u8_scalar/1920 ... bench:       5,368 ns/iter (+/- 1,128)
test p012_to_rgb_row/u8_simd/1920 ... bench:         861 ns/iter (+/- 195)
test p012_to_rgb_row/u8_scalar/3840 ... bench:       9,862 ns/iter (+/- 1,817)
test p012_to_rgb_row/u8_simd/3840 ... bench:       1,544 ns/iter (+/- 135)
test p012_to_rgb_u16_row/u16_scalar/1280 ... bench:       2,883 ns/iter (+/- 113)
test p012_to_rgb_u16_row/u16_simd/1280 ... bench:         647 ns/iter (+/- 40)
test p012_to_rgb_u16_row/u16_scalar/1920 ... bench:       4,317 ns/iter (+/- 140)
test p012_to_rgb_u16_row/u16_simd/1920 ... bench:         976 ns/iter (+/- 33)
test p012_to_rgb_u16_row/u16_scalar/3840 ... bench:       8,637 ns/iter (+/- 98)
test p012_to_rgb_u16_row/u16_simd/3840 ... bench:       1,945 ns/iter (+/- 47)
test rgb_to_hsv_row/scalar/1280 ... bench:       3,352 ns/iter (+/- 391)
test rgb_to_hsv_row/simd/1280 ... bench:       1,648 ns/iter (+/- 278)
test rgb_to_hsv_row/scalar/1920 ... bench:       5,015 ns/iter (+/- 42)
test rgb_to_hsv_row/simd/1920 ... bench:       2,334 ns/iter (+/- 28)
test rgb_to_hsv_row/scalar/3840 ... bench:      10,024 ns/iter (+/- 366)
test rgb_to_hsv_row/simd/3840 ... bench:       4,679 ns/iter (+/- 343)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       3,055 ns/iter (+/- 874)
test yuv_420_to_rgb_row/simd/1280 ... bench:         530 ns/iter (+/- 93)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       5,155 ns/iter (+/- 1,074)
test yuv_420_to_rgb_row/simd/1920 ... bench:         797 ns/iter (+/- 90)
test yuv_420_to_rgb_row/scalar/3840 ... bench:       8,910 ns/iter (+/- 1,347)
test yuv_420_to_rgb_row/simd/3840 ... bench:       1,634 ns/iter (+/- 247)
test yuv420p10_to_rgb_row/u8_scalar/1280 ... bench:       3,212 ns/iter (+/- 314)
test yuv420p10_to_rgb_row/u8_simd/1280 ... bench:         504 ns/iter (+/- 34)
test yuv420p10_to_rgb_row/u8_scalar/1920 ... bench:       4,765 ns/iter (+/- 525)
test yuv420p10_to_rgb_row/u8_simd/1920 ... bench:         757 ns/iter (+/- 59)
test yuv420p10_to_rgb_row/u8_scalar/3840 ... bench:       9,673 ns/iter (+/- 3,119)
test yuv420p10_to_rgb_row/u8_simd/3840 ... bench:       1,493 ns/iter (+/- 93)
test yuv420p10_to_rgb_u16_row/u16_scalar/1280 ... bench:       3,173 ns/iter (+/- 241)
test yuv420p10_to_rgb_u16_row/u16_simd/1280 ... bench:         622 ns/iter (+/- 31)
test yuv420p10_to_rgb_u16_row/u16_scalar/1920 ... bench:       4,749 ns/iter (+/- 221)
test yuv420p10_to_rgb_u16_row/u16_simd/1920 ... bench:         937 ns/iter (+/- 105)
test yuv420p10_to_rgb_u16_row/u16_scalar/3840 ... bench:       9,485 ns/iter (+/- 171)
test yuv420p10_to_rgb_u16_row/u16_simd/3840 ... bench:       1,863 ns/iter (+/- 40)
test yuv420p12_to_rgb_row/u8_scalar/1280 ... bench:       3,167 ns/iter (+/- 296)
test yuv420p12_to_rgb_row/u8_simd/1280 ... bench:         499 ns/iter (+/- 68)
test yuv420p12_to_rgb_row/u8_scalar/1920 ... bench:       5,274 ns/iter (+/- 494)
test yuv420p12_to_rgb_row/u8_simd/1920 ... bench:         752 ns/iter (+/- 73)
test yuv420p12_to_rgb_row/u8_scalar/3840 ... bench:       9,652 ns/iter (+/- 1,712)
test yuv420p12_to_rgb_row/u8_simd/3840 ... bench:       1,495 ns/iter (+/- 162)
test yuv420p12_to_rgb_u16_row/u16_scalar/1280 ... bench:       3,197 ns/iter (+/- 463)
test yuv420p12_to_rgb_u16_row/u16_simd/1280 ... bench:         624 ns/iter (+/- 47)
test yuv420p12_to_rgb_u16_row/u16_scalar/1920 ... bench:       4,758 ns/iter (+/- 399)
test yuv420p12_to_rgb_u16_row/u16_simd/1920 ... bench:         972 ns/iter (+/- 111)
test yuv420p12_to_rgb_u16_row/u16_scalar/3840 ... bench:       9,603 ns/iter (+/- 1,482)
test yuv420p12_to_rgb_u16_row/u16_simd/3840 ... bench:       1,931 ns/iter (+/- 431)
test yuv420p14_to_rgb_row/u8_scalar/1280 ... bench:       3,375 ns/iter (+/- 990)
test yuv420p14_to_rgb_row/u8_simd/1280 ... bench:         507 ns/iter (+/- 42)
test yuv420p14_to_rgb_row/u8_scalar/1920 ... bench:       5,257 ns/iter (+/- 229)
test yuv420p14_to_rgb_row/u8_simd/1920 ... bench:         815 ns/iter (+/- 31)
test yuv420p14_to_rgb_row/u8_scalar/3840 ... bench:      10,425 ns/iter (+/- 566)
test yuv420p14_to_rgb_row/u8_simd/3840 ... bench:       1,544 ns/iter (+/- 95)
test yuv420p14_to_rgb_u16_row/u16_scalar/1280 ... bench:       3,249 ns/iter (+/- 189)
test yuv420p14_to_rgb_u16_row/u16_simd/1280 ... bench:         624 ns/iter (+/- 59)
test yuv420p14_to_rgb_u16_row/u16_scalar/1920 ... bench:       4,802 ns/iter (+/- 241)
test yuv420p14_to_rgb_u16_row/u16_simd/1920 ... bench:         927 ns/iter (+/- 31)
test yuv420p14_to_rgb_u16_row/u16_scalar/3840 ... bench:       9,520 ns/iter (+/- 585)
test yuv420p14_to_rgb_u16_row/u16_simd/3840 ... bench:       1,864 ns/iter (+/- 86)

Benchmark Results for macos-aarch64-scalar

System Information

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

all

test nv12_to_rgb_row/scalar/1280 ... bench:       2,861 ns/iter (+/- 56)
test nv12_to_rgb_row/simd/1280 ... bench:       2,725 ns/iter (+/- 34)
test nv12_to_rgb_row/scalar/1920 ... bench:       4,091 ns/iter (+/- 108)
test nv12_to_rgb_row/simd/1920 ... bench:       4,085 ns/iter (+/- 102)
test nv12_to_rgb_row/scalar/3840 ... bench:       8,159 ns/iter (+/- 33)
test nv12_to_rgb_row/simd/3840 ... bench:       8,162 ns/iter (+/- 264)
test nv21_to_rgb_row/scalar/1280 ... bench:       2,725 ns/iter (+/- 95)
test nv21_to_rgb_row/simd/1280 ... bench:       2,753 ns/iter (+/- 243)
test nv21_to_rgb_row/scalar/1920 ... bench:       4,086 ns/iter (+/- 80)
test nv21_to_rgb_row/simd/1920 ... bench:       4,082 ns/iter (+/- 74)
test nv21_to_rgb_row/scalar/3840 ... bench:       8,226 ns/iter (+/- 651)
test nv21_to_rgb_row/simd/3840 ... bench:       8,161 ns/iter (+/- 40)
test p010_to_rgb_row/u8_scalar/1280 ... bench:       2,737 ns/iter (+/- 16)
test p010_to_rgb_row/u8_simd/1280 ... bench:       2,737 ns/iter (+/- 14)
test p010_to_rgb_row/u8_scalar/1920 ... bench:       4,102 ns/iter (+/- 49)
test p010_to_rgb_row/u8_simd/1920 ... bench:       4,102 ns/iter (+/- 16)
test p010_to_rgb_row/u8_scalar/3840 ... bench:       8,210 ns/iter (+/- 281)
test p010_to_rgb_row/u8_simd/3840 ... bench:       8,196 ns/iter (+/- 39)
test p010_to_rgb_u16_row/u16_scalar/1280 ... bench:       2,685 ns/iter (+/- 27)
test p010_to_rgb_u16_row/u16_simd/1280 ... bench:       2,684 ns/iter (+/- 11)
test p010_to_rgb_u16_row/u16_scalar/1920 ... bench:       4,025 ns/iter (+/- 72)
test p010_to_rgb_u16_row/u16_simd/1920 ... bench:       4,025 ns/iter (+/- 36)
test p010_to_rgb_u16_row/u16_scalar/3840 ... bench:       8,038 ns/iter (+/- 42)
test p010_to_rgb_u16_row/u16_simd/3840 ... bench:       8,275 ns/iter (+/- 228)
test p012_to_rgb_row/u8_scalar/1280 ... bench:       2,736 ns/iter (+/- 16)
test p012_to_rgb_row/u8_simd/1280 ... bench:       2,736 ns/iter (+/- 24)
test p012_to_rgb_row/u8_scalar/1920 ... bench:       4,102 ns/iter (+/- 39)
test p012_to_rgb_row/u8_simd/1920 ... bench:       4,101 ns/iter (+/- 18)
test p012_to_rgb_row/u8_scalar/3840 ... bench:       8,203 ns/iter (+/- 202)
test p012_to_rgb_row/u8_simd/3840 ... bench:       8,197 ns/iter (+/- 225)
test p012_to_rgb_u16_row/u16_scalar/1280 ... bench:       2,684 ns/iter (+/- 48)
test p012_to_rgb_u16_row/u16_simd/1280 ... bench:       2,684 ns/iter (+/- 22)
test p012_to_rgb_u16_row/u16_scalar/1920 ... bench:       4,025 ns/iter (+/- 79)
test p012_to_rgb_u16_row/u16_simd/1920 ... bench:       4,024 ns/iter (+/- 165)
test p012_to_rgb_u16_row/u16_scalar/3840 ... bench:       8,041 ns/iter (+/- 170)
test p012_to_rgb_u16_row/u16_simd/3840 ... bench:       8,039 ns/iter (+/- 135)
test rgb_to_hsv_row/scalar/1280 ... bench:       3,116 ns/iter (+/- 72)
test rgb_to_hsv_row/simd/1280 ... bench:       3,116 ns/iter (+/- 60)
test rgb_to_hsv_row/scalar/1920 ... bench:       4,699 ns/iter (+/- 118)
test rgb_to_hsv_row/simd/1920 ... bench:       4,674 ns/iter (+/- 97)
test rgb_to_hsv_row/scalar/3840 ... bench:       9,388 ns/iter (+/- 901)
test rgb_to_hsv_row/simd/3840 ... bench:       9,355 ns/iter (+/- 1,224)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       2,695 ns/iter (+/- 50)
test yuv_420_to_rgb_row/simd/1280 ... bench:       2,700 ns/iter (+/- 68)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       4,037 ns/iter (+/- 75)
test yuv_420_to_rgb_row/simd/1920 ... bench:       4,036 ns/iter (+/- 69)
test yuv_420_to_rgb_row/scalar/3840 ... bench:       8,264 ns/iter (+/- 138)
test yuv_420_to_rgb_row/simd/3840 ... bench:       8,262 ns/iter (+/- 136)
test yuv420p10_to_rgb_row/u8_scalar/1280 ... bench:       2,947 ns/iter (+/- 44)
test yuv420p10_to_rgb_row/u8_simd/1280 ... bench:       2,948 ns/iter (+/- 59)
test yuv420p10_to_rgb_row/u8_scalar/1920 ... bench:       4,418 ns/iter (+/- 89)
test yuv420p10_to_rgb_row/u8_simd/1920 ... bench:       4,420 ns/iter (+/- 75)
test yuv420p10_to_rgb_row/u8_scalar/3840 ... bench:       8,832 ns/iter (+/- 130)
test yuv420p10_to_rgb_row/u8_simd/3840 ... bench:       8,832 ns/iter (+/- 142)
test yuv420p10_to_rgb_u16_row/u16_scalar/1280 ... bench:       2,948 ns/iter (+/- 91)
test yuv420p10_to_rgb_u16_row/u16_simd/1280 ... bench:       2,947 ns/iter (+/- 30)
test yuv420p10_to_rgb_u16_row/u16_scalar/1920 ... bench:       4,422 ns/iter (+/- 106)
test yuv420p10_to_rgb_u16_row/u16_simd/1920 ... bench:       4,425 ns/iter (+/- 119)
test yuv420p10_to_rgb_u16_row/u16_scalar/3840 ... bench:       8,832 ns/iter (+/- 241)
test yuv420p10_to_rgb_u16_row/u16_simd/3840 ... bench:       8,831 ns/iter (+/- 173)
test yuv420p12_to_rgb_row/u8_scalar/1280 ... bench:       2,947 ns/iter (+/- 54)
test yuv420p12_to_rgb_row/u8_simd/1280 ... bench:       2,947 ns/iter (+/- 47)
test yuv420p12_to_rgb_row/u8_scalar/1920 ... bench:       4,418 ns/iter (+/- 89)
test yuv420p12_to_rgb_row/u8_simd/1920 ... bench:       4,420 ns/iter (+/- 92)
test yuv420p12_to_rgb_row/u8_scalar/3840 ... bench:       8,826 ns/iter (+/- 223)
test yuv420p12_to_rgb_row/u8_simd/3840 ... bench:       8,828 ns/iter (+/- 29)
test yuv420p12_to_rgb_u16_row/u16_scalar/1280 ... bench:       2,949 ns/iter (+/- 50)
test yuv420p12_to_rgb_u16_row/u16_simd/1280 ... bench:       2,946 ns/iter (+/- 45)
test yuv420p12_to_rgb_u16_row/u16_scalar/1920 ... bench:       4,418 ns/iter (+/- 64)
test yuv420p12_to_rgb_u16_row/u16_simd/1920 ... bench:       4,420 ns/iter (+/- 58)
test yuv420p12_to_rgb_u16_row/u16_scalar/3840 ... bench:       8,843 ns/iter (+/- 204)
test yuv420p12_to_rgb_u16_row/u16_simd/3840 ... bench:       8,842 ns/iter (+/- 260)
test yuv420p14_to_rgb_row/u8_scalar/1280 ... bench:       3,032 ns/iter (+/- 93)
test yuv420p14_to_rgb_row/u8_simd/1280 ... bench:       3,028 ns/iter (+/- 42)
test yuv420p14_to_rgb_row/u8_scalar/1920 ... bench:       4,542 ns/iter (+/- 65)
test yuv420p14_to_rgb_row/u8_simd/1920 ... bench:       4,541 ns/iter (+/- 71)
test yuv420p14_to_rgb_row/u8_scalar/3840 ... bench:       9,079 ns/iter (+/- 138)
test yuv420p14_to_rgb_row/u8_simd/3840 ... bench:       9,079 ns/iter (+/- 124)
test yuv420p14_to_rgb_u16_row/u16_scalar/1280 ... bench:       2,953 ns/iter (+/- 11)
test yuv420p14_to_rgb_u16_row/u16_simd/1280 ... bench:       2,959 ns/iter (+/- 75)
test yuv420p14_to_rgb_u16_row/u16_scalar/1920 ... bench:       4,438 ns/iter (+/- 122)
test yuv420p14_to_rgb_u16_row/u16_simd/1920 ... bench:       4,428 ns/iter (+/- 81)
test yuv420p14_to_rgb_u16_row/u16_scalar/3840 ... bench:       8,855 ns/iter (+/- 165)
test yuv420p14_to_rgb_u16_row/u16_simd/3840 ... bench:       9,176 ns/iter (+/- 507)

Benchmark Results for ubuntu-x86_64-avx2-max

System Information

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

all

test nv12_to_rgb_row/scalar/1280 ... bench:       4,892 ns/iter (+/- 9)
test nv12_to_rgb_row/simd/1280 ... bench:       1,116 ns/iter (+/- 1)
test nv12_to_rgb_row/scalar/1920 ... bench:       7,385 ns/iter (+/- 35)
test nv12_to_rgb_row/simd/1920 ... bench:       1,673 ns/iter (+/- 1)
test nv12_to_rgb_row/scalar/3840 ... bench:      14,740 ns/iter (+/- 37)
test nv12_to_rgb_row/simd/3840 ... bench:       3,349 ns/iter (+/- 2)
test nv21_to_rgb_row/scalar/1280 ... bench:       5,071 ns/iter (+/- 40)
test nv21_to_rgb_row/simd/1280 ... bench:       1,119 ns/iter (+/- 15)
test nv21_to_rgb_row/scalar/1920 ... bench:       7,348 ns/iter (+/- 26)
test nv21_to_rgb_row/simd/1920 ... bench:       1,678 ns/iter (+/- 32)
test nv21_to_rgb_row/scalar/3840 ... bench:      14,689 ns/iter (+/- 61)
test nv21_to_rgb_row/simd/3840 ... bench:       3,353 ns/iter (+/- 70)
test p010_to_rgb_row/u8_scalar/1280 ... bench:       4,402 ns/iter (+/- 17)
test p010_to_rgb_row/u8_simd/1280 ... bench:       1,175 ns/iter (+/- 2)
test p010_to_rgb_row/u8_scalar/1920 ... bench:       6,603 ns/iter (+/- 68)
test p010_to_rgb_row/u8_simd/1920 ... bench:       1,755 ns/iter (+/- 3)
test p010_to_rgb_row/u8_scalar/3840 ... bench:      13,042 ns/iter (+/- 54)
test p010_to_rgb_row/u8_simd/3840 ... bench:       3,512 ns/iter (+/- 9)
test p010_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,521 ns/iter (+/- 102)
test p010_to_rgb_u16_row/u16_simd/1280 ... bench:       1,217 ns/iter (+/- 2)
test p010_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,811 ns/iter (+/- 165)
test p010_to_rgb_u16_row/u16_simd/1920 ... bench:       1,824 ns/iter (+/- 1)
test p010_to_rgb_u16_row/u16_scalar/3840 ... bench:      13,576 ns/iter (+/- 30)
test p010_to_rgb_u16_row/u16_simd/3840 ... bench:       3,663 ns/iter (+/- 4)
test p012_to_rgb_row/u8_scalar/1280 ... bench:       4,628 ns/iter (+/- 39)
test p012_to_rgb_row/u8_simd/1280 ... bench:       1,170 ns/iter (+/- 0)
test p012_to_rgb_row/u8_scalar/1920 ... bench:       6,943 ns/iter (+/- 27)
test p012_to_rgb_row/u8_simd/1920 ... bench:       1,753 ns/iter (+/- 1)
test p012_to_rgb_row/u8_scalar/3840 ... bench:      13,939 ns/iter (+/- 122)
test p012_to_rgb_row/u8_simd/3840 ... bench:       3,513 ns/iter (+/- 5)
test p012_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,566 ns/iter (+/- 13)
test p012_to_rgb_u16_row/u16_simd/1280 ... bench:       1,220 ns/iter (+/- 1)
test p012_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,858 ns/iter (+/- 24)
test p012_to_rgb_u16_row/u16_simd/1920 ... bench:       1,822 ns/iter (+/- 2)
test p012_to_rgb_u16_row/u16_scalar/3840 ... bench:      13,780 ns/iter (+/- 36)
test p012_to_rgb_u16_row/u16_simd/3840 ... bench:       3,655 ns/iter (+/- 2)
test rgb_to_hsv_row/scalar/1280 ... bench:       5,000 ns/iter (+/- 89)
test rgb_to_hsv_row/simd/1280 ... bench:       2,600 ns/iter (+/- 4)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,076 ns/iter (+/- 32)
test rgb_to_hsv_row/simd/1920 ... bench:       3,876 ns/iter (+/- 7)
test rgb_to_hsv_row/scalar/3840 ... bench:      14,271 ns/iter (+/- 41)
test rgb_to_hsv_row/simd/3840 ... bench:       7,758 ns/iter (+/- 8)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,583 ns/iter (+/- 78)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,006 ns/iter (+/- 2)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       6,931 ns/iter (+/- 27)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,505 ns/iter (+/- 6)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      13,843 ns/iter (+/- 34)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,012 ns/iter (+/- 7)
test yuv420p10_to_rgb_row/u8_scalar/1280 ... bench:       4,673 ns/iter (+/- 16)
test yuv420p10_to_rgb_row/u8_simd/1280 ... bench:         992 ns/iter (+/- 2)
test yuv420p10_to_rgb_row/u8_scalar/1920 ... bench:       7,098 ns/iter (+/- 20)
test yuv420p10_to_rgb_row/u8_simd/1920 ... bench:       1,483 ns/iter (+/- 1)
test yuv420p10_to_rgb_row/u8_scalar/3840 ... bench:      14,298 ns/iter (+/- 44)
test yuv420p10_to_rgb_row/u8_simd/3840 ... bench:       2,969 ns/iter (+/- 1)
test yuv420p10_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,754 ns/iter (+/- 33)
test yuv420p10_to_rgb_u16_row/u16_simd/1280 ... bench:       1,022 ns/iter (+/- 2)
test yuv420p10_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,220 ns/iter (+/- 35)
test yuv420p10_to_rgb_u16_row/u16_simd/1920 ... bench:       1,524 ns/iter (+/- 1)
test yuv420p10_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,597 ns/iter (+/- 142)
test yuv420p10_to_rgb_u16_row/u16_simd/3840 ... bench:       3,090 ns/iter (+/- 5)
test yuv420p12_to_rgb_row/u8_scalar/1280 ... bench:       4,719 ns/iter (+/- 8)
test yuv420p12_to_rgb_row/u8_simd/1280 ... bench:         990 ns/iter (+/- 1)
test yuv420p12_to_rgb_row/u8_scalar/1920 ... bench:       7,127 ns/iter (+/- 41)
test yuv420p12_to_rgb_row/u8_simd/1920 ... bench:       1,483 ns/iter (+/- 6)
test yuv420p12_to_rgb_row/u8_scalar/3840 ... bench:      14,235 ns/iter (+/- 41)
test yuv420p12_to_rgb_row/u8_simd/3840 ... bench:       2,967 ns/iter (+/- 2)
test yuv420p12_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,759 ns/iter (+/- 11)
test yuv420p12_to_rgb_u16_row/u16_simd/1280 ... bench:       1,021 ns/iter (+/- 3)
test yuv420p12_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,203 ns/iter (+/- 70)
test yuv420p12_to_rgb_u16_row/u16_simd/1920 ... bench:       1,528 ns/iter (+/- 4)
test yuv420p12_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,539 ns/iter (+/- 45)
test yuv420p12_to_rgb_u16_row/u16_simd/3840 ... bench:       3,067 ns/iter (+/- 3)
test yuv420p14_to_rgb_row/u8_scalar/1280 ... bench:       4,764 ns/iter (+/- 26)
test yuv420p14_to_rgb_row/u8_simd/1280 ... bench:         992 ns/iter (+/- 4)
test yuv420p14_to_rgb_row/u8_scalar/1920 ... bench:       7,155 ns/iter (+/- 22)
test yuv420p14_to_rgb_row/u8_simd/1920 ... bench:       1,486 ns/iter (+/- 1)
test yuv420p14_to_rgb_row/u8_scalar/3840 ... bench:      14,373 ns/iter (+/- 27)
test yuv420p14_to_rgb_row/u8_simd/3840 ... bench:       2,969 ns/iter (+/- 2)
test yuv420p14_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,721 ns/iter (+/- 19)
test yuv420p14_to_rgb_u16_row/u16_simd/1280 ... bench:       1,024 ns/iter (+/- 3)
test yuv420p14_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,108 ns/iter (+/- 26)
test yuv420p14_to_rgb_u16_row/u16_simd/1920 ... bench:       1,525 ns/iter (+/- 1)
test yuv420p14_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,256 ns/iter (+/- 65)
test yuv420p14_to_rgb_u16_row/u16_simd/3840 ... bench:       3,060 ns/iter (+/- 4)

Benchmark Results for ubuntu-x86_64-default

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: default
  • Runner: GitHub Actions 1000009654
  • Runner arch (GH): X64
  • RUSTFLAGS: ``
  • Date: 2026-04-19 12:12:50 UTC

all

test nv12_to_rgb_row/scalar/1280 ... bench:       4,270 ns/iter (+/- 122)
test nv12_to_rgb_row/simd/1280 ... bench:       1,012 ns/iter (+/- 2)
test nv12_to_rgb_row/scalar/1920 ... bench:       6,480 ns/iter (+/- 12)
test nv12_to_rgb_row/simd/1920 ... bench:       1,520 ns/iter (+/- 4)
test nv12_to_rgb_row/scalar/3840 ... bench:      12,917 ns/iter (+/- 47)
test nv12_to_rgb_row/simd/3840 ... bench:       3,035 ns/iter (+/- 3)
test nv21_to_rgb_row/scalar/1280 ... bench:       4,464 ns/iter (+/- 12)
test nv21_to_rgb_row/simd/1280 ... bench:       1,011 ns/iter (+/- 1)
test nv21_to_rgb_row/scalar/1920 ... bench:       6,518 ns/iter (+/- 51)
test nv21_to_rgb_row/simd/1920 ... bench:       1,516 ns/iter (+/- 3)
test nv21_to_rgb_row/scalar/3840 ... bench:      12,548 ns/iter (+/- 30)
test nv21_to_rgb_row/simd/3840 ... bench:       3,034 ns/iter (+/- 2)
test p010_to_rgb_row/u8_scalar/1280 ... bench:       4,671 ns/iter (+/- 8)
test p010_to_rgb_row/u8_simd/1280 ... bench:       1,057 ns/iter (+/- 1)
test p010_to_rgb_row/u8_scalar/1920 ... bench:       7,027 ns/iter (+/- 45)
test p010_to_rgb_row/u8_simd/1920 ... bench:       1,586 ns/iter (+/- 2)
test p010_to_rgb_row/u8_scalar/3840 ... bench:      14,075 ns/iter (+/- 44)
test p010_to_rgb_row/u8_simd/3840 ... bench:       3,172 ns/iter (+/- 24)
test p010_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,522 ns/iter (+/- 34)
test p010_to_rgb_u16_row/u16_simd/1280 ... bench:       1,147 ns/iter (+/- 1)
test p010_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,725 ns/iter (+/- 14)
test p010_to_rgb_u16_row/u16_simd/1920 ... bench:       1,720 ns/iter (+/- 5)
test p010_to_rgb_u16_row/u16_scalar/3840 ... bench:      13,400 ns/iter (+/- 52)
test p010_to_rgb_u16_row/u16_simd/3840 ... bench:       3,443 ns/iter (+/- 29)
test p012_to_rgb_row/u8_scalar/1280 ... bench:       4,793 ns/iter (+/- 108)
test p012_to_rgb_row/u8_simd/1280 ... bench:       1,056 ns/iter (+/- 0)
test p012_to_rgb_row/u8_scalar/1920 ... bench:       7,046 ns/iter (+/- 29)
test p012_to_rgb_row/u8_simd/1920 ... bench:       1,584 ns/iter (+/- 1)
test p012_to_rgb_row/u8_scalar/3840 ... bench:      14,194 ns/iter (+/- 97)
test p012_to_rgb_row/u8_simd/3840 ... bench:       3,173 ns/iter (+/- 36)
test p012_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,460 ns/iter (+/- 163)
test p012_to_rgb_u16_row/u16_simd/1280 ... bench:       1,146 ns/iter (+/- 6)
test p012_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,681 ns/iter (+/- 29)
test p012_to_rgb_u16_row/u16_simd/1920 ... bench:       1,722 ns/iter (+/- 1)
test p012_to_rgb_u16_row/u16_scalar/3840 ... bench:      13,481 ns/iter (+/- 110)
test p012_to_rgb_u16_row/u16_simd/3840 ... bench:       3,445 ns/iter (+/- 4)
test rgb_to_hsv_row/scalar/1280 ... bench:       4,598 ns/iter (+/- 12)
test rgb_to_hsv_row/simd/1280 ... bench:       2,789 ns/iter (+/- 3)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,887 ns/iter (+/- 21)
test rgb_to_hsv_row/simd/1920 ... bench:       4,182 ns/iter (+/- 13)
test rgb_to_hsv_row/scalar/3840 ... bench:      13,806 ns/iter (+/- 69)
test rgb_to_hsv_row/simd/3840 ... bench:       8,367 ns/iter (+/- 18)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,522 ns/iter (+/- 66)
test yuv_420_to_rgb_row/simd/1280 ... bench:         941 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       6,867 ns/iter (+/- 27)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,409 ns/iter (+/- 2)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      13,737 ns/iter (+/- 78)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,817 ns/iter (+/- 15)
test yuv420p10_to_rgb_row/u8_scalar/1280 ... bench:       4,675 ns/iter (+/- 139)
test yuv420p10_to_rgb_row/u8_simd/1280 ... bench:         916 ns/iter (+/- 1)
test yuv420p10_to_rgb_row/u8_scalar/1920 ... bench:       7,250 ns/iter (+/- 29)
test yuv420p10_to_rgb_row/u8_simd/1920 ... bench:       1,368 ns/iter (+/- 11)
test yuv420p10_to_rgb_row/u8_scalar/3840 ... bench:      14,509 ns/iter (+/- 89)
test yuv420p10_to_rgb_row/u8_simd/3840 ... bench:       2,730 ns/iter (+/- 3)
test yuv420p10_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,758 ns/iter (+/- 40)
test yuv420p10_to_rgb_u16_row/u16_simd/1280 ... bench:         996 ns/iter (+/- 1)
test yuv420p10_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,168 ns/iter (+/- 22)
test yuv420p10_to_rgb_u16_row/u16_simd/1920 ... bench:       1,496 ns/iter (+/- 2)
test yuv420p10_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,401 ns/iter (+/- 28)
test yuv420p10_to_rgb_u16_row/u16_simd/3840 ... bench:       3,004 ns/iter (+/- 3)
test yuv420p12_to_rgb_row/u8_scalar/1280 ... bench:       4,730 ns/iter (+/- 52)
test yuv420p12_to_rgb_row/u8_simd/1280 ... bench:         912 ns/iter (+/- 0)
test yuv420p12_to_rgb_row/u8_scalar/1920 ... bench:       7,191 ns/iter (+/- 35)
test yuv420p12_to_rgb_row/u8_simd/1920 ... bench:       1,366 ns/iter (+/- 2)
test yuv420p12_to_rgb_row/u8_scalar/3840 ... bench:      14,409 ns/iter (+/- 86)
test yuv420p12_to_rgb_row/u8_simd/3840 ... bench:       2,728 ns/iter (+/- 4)
test yuv420p12_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,924 ns/iter (+/- 13)
test yuv420p12_to_rgb_u16_row/u16_simd/1280 ... bench:         998 ns/iter (+/- 1)
test yuv420p12_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,193 ns/iter (+/- 62)
test yuv420p12_to_rgb_u16_row/u16_simd/1920 ... bench:       1,492 ns/iter (+/- 1)
test yuv420p12_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,332 ns/iter (+/- 46)
test yuv420p12_to_rgb_u16_row/u16_simd/3840 ... bench:       3,001 ns/iter (+/- 19)
test yuv420p14_to_rgb_row/u8_scalar/1280 ... bench:       4,822 ns/iter (+/- 34)
test yuv420p14_to_rgb_row/u8_simd/1280 ... bench:         912 ns/iter (+/- 8)
test yuv420p14_to_rgb_row/u8_scalar/1920 ... bench:       7,175 ns/iter (+/- 186)
test yuv420p14_to_rgb_row/u8_simd/1920 ... bench:       1,366 ns/iter (+/- 2)
test yuv420p14_to_rgb_row/u8_scalar/3840 ... bench:      14,423 ns/iter (+/- 261)
test yuv420p14_to_rgb_row/u8_simd/3840 ... bench:       2,728 ns/iter (+/- 3)
test yuv420p14_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,762 ns/iter (+/- 18)
test yuv420p14_to_rgb_u16_row/u16_simd/1280 ... bench:         996 ns/iter (+/- 9)
test yuv420p14_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,242 ns/iter (+/- 43)
test yuv420p14_to_rgb_u16_row/u16_simd/1920 ... bench:       1,495 ns/iter (+/- 2)
test yuv420p14_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,307 ns/iter (+/- 51)
test yuv420p14_to_rgb_u16_row/u16_simd/3840 ... bench:       2,994 ns/iter (+/- 4)

Benchmark Results for ubuntu-x86_64-native

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: native
  • Runner: GitHub Actions 1000009655
  • Runner arch (GH): X64
  • RUSTFLAGS: ``
  • CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUSTFLAGS: -C target-cpu=native
  • Date: 2026-04-19 12:12:57 UTC

all

test nv12_to_rgb_row/scalar/1280 ... bench:       4,667 ns/iter (+/- 52)
test nv12_to_rgb_row/simd/1280 ... bench:       1,116 ns/iter (+/- 1)
test nv12_to_rgb_row/scalar/1920 ... bench:       6,693 ns/iter (+/- 12)
test nv12_to_rgb_row/simd/1920 ... bench:       1,675 ns/iter (+/- 4)
test nv12_to_rgb_row/scalar/3840 ... bench:      13,430 ns/iter (+/- 24)
test nv12_to_rgb_row/simd/3840 ... bench:       3,352 ns/iter (+/- 4)
test nv21_to_rgb_row/scalar/1280 ... bench:       4,454 ns/iter (+/- 29)
test nv21_to_rgb_row/simd/1280 ... bench:       1,118 ns/iter (+/- 11)
test nv21_to_rgb_row/scalar/1920 ... bench:       6,702 ns/iter (+/- 20)
test nv21_to_rgb_row/simd/1920 ... bench:       1,678 ns/iter (+/- 4)
test nv21_to_rgb_row/scalar/3840 ... bench:      13,420 ns/iter (+/- 100)
test nv21_to_rgb_row/simd/3840 ... bench:       3,355 ns/iter (+/- 5)
test p010_to_rgb_row/u8_scalar/1280 ... bench:       4,791 ns/iter (+/- 15)
test p010_to_rgb_row/u8_simd/1280 ... bench:       1,170 ns/iter (+/- 0)
test p010_to_rgb_row/u8_scalar/1920 ... bench:       7,176 ns/iter (+/- 37)
test p010_to_rgb_row/u8_simd/1920 ... bench:       1,754 ns/iter (+/- 1)
test p010_to_rgb_row/u8_scalar/3840 ... bench:      14,378 ns/iter (+/- 36)
test p010_to_rgb_row/u8_simd/3840 ... bench:       3,512 ns/iter (+/- 4)
test p010_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,497 ns/iter (+/- 31)
test p010_to_rgb_u16_row/u16_simd/1280 ... bench:       1,218 ns/iter (+/- 16)
test p010_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,763 ns/iter (+/- 17)
test p010_to_rgb_u16_row/u16_simd/1920 ... bench:       1,824 ns/iter (+/- 43)
test p010_to_rgb_u16_row/u16_scalar/3840 ... bench:      13,481 ns/iter (+/- 43)
test p010_to_rgb_u16_row/u16_simd/3840 ... bench:       3,661 ns/iter (+/- 3)
test p012_to_rgb_row/u8_scalar/1280 ... bench:       4,743 ns/iter (+/- 10)
test p012_to_rgb_row/u8_simd/1280 ... bench:       1,172 ns/iter (+/- 1)
test p012_to_rgb_row/u8_scalar/1920 ... bench:       7,151 ns/iter (+/- 94)
test p012_to_rgb_row/u8_simd/1920 ... bench:       1,755 ns/iter (+/- 1)
test p012_to_rgb_row/u8_scalar/3840 ... bench:      14,310 ns/iter (+/- 67)
test p012_to_rgb_row/u8_simd/3840 ... bench:       3,512 ns/iter (+/- 22)
test p012_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,456 ns/iter (+/- 15)
test p012_to_rgb_u16_row/u16_simd/1280 ... bench:       1,218 ns/iter (+/- 1)
test p012_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,705 ns/iter (+/- 15)
test p012_to_rgb_u16_row/u16_simd/1920 ... bench:       1,826 ns/iter (+/- 2)
test p012_to_rgb_u16_row/u16_scalar/3840 ... bench:      13,433 ns/iter (+/- 69)
test p012_to_rgb_u16_row/u16_simd/3840 ... bench:       3,661 ns/iter (+/- 4)
test rgb_to_hsv_row/scalar/1280 ... bench:       4,661 ns/iter (+/- 11)
test rgb_to_hsv_row/simd/1280 ... bench:       2,585 ns/iter (+/- 2)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,015 ns/iter (+/- 44)
test rgb_to_hsv_row/simd/1920 ... bench:       3,876 ns/iter (+/- 22)
test rgb_to_hsv_row/scalar/3840 ... bench:      14,093 ns/iter (+/- 35)
test rgb_to_hsv_row/simd/3840 ... bench:       7,773 ns/iter (+/- 15)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,564 ns/iter (+/- 11)
test yuv_420_to_rgb_row/simd/1280 ... bench:       1,003 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       6,902 ns/iter (+/- 239)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,506 ns/iter (+/- 9)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      13,945 ns/iter (+/- 54)
test yuv_420_to_rgb_row/simd/3840 ... bench:       3,013 ns/iter (+/- 7)
test yuv420p10_to_rgb_row/u8_scalar/1280 ... bench:       4,848 ns/iter (+/- 81)
test yuv420p10_to_rgb_row/u8_simd/1280 ... bench:         990 ns/iter (+/- 6)
test yuv420p10_to_rgb_row/u8_scalar/1920 ... bench:       7,340 ns/iter (+/- 18)
test yuv420p10_to_rgb_row/u8_simd/1920 ... bench:       1,484 ns/iter (+/- 6)
test yuv420p10_to_rgb_row/u8_scalar/3840 ... bench:      14,795 ns/iter (+/- 32)
test yuv420p10_to_rgb_row/u8_simd/3840 ... bench:       2,970 ns/iter (+/- 4)
test yuv420p10_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,824 ns/iter (+/- 8)
test yuv420p10_to_rgb_u16_row/u16_simd/1280 ... bench:       1,024 ns/iter (+/- 7)
test yuv420p10_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,272 ns/iter (+/- 38)
test yuv420p10_to_rgb_u16_row/u16_simd/1920 ... bench:       1,526 ns/iter (+/- 2)
test yuv420p10_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,599 ns/iter (+/- 41)
test yuv420p10_to_rgb_u16_row/u16_simd/3840 ... bench:       3,069 ns/iter (+/- 51)
test yuv420p12_to_rgb_row/u8_scalar/1280 ... bench:       4,853 ns/iter (+/- 23)
test yuv420p12_to_rgb_row/u8_simd/1280 ... bench:         993 ns/iter (+/- 4)
test yuv420p12_to_rgb_row/u8_scalar/1920 ... bench:       7,321 ns/iter (+/- 105)
test yuv420p12_to_rgb_row/u8_simd/1920 ... bench:       1,483 ns/iter (+/- 4)
test yuv420p12_to_rgb_row/u8_scalar/3840 ... bench:      14,623 ns/iter (+/- 63)
test yuv420p12_to_rgb_row/u8_simd/3840 ... bench:       2,971 ns/iter (+/- 4)
test yuv420p12_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,773 ns/iter (+/- 33)
test yuv420p12_to_rgb_u16_row/u16_simd/1280 ... bench:       1,024 ns/iter (+/- 6)
test yuv420p12_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,233 ns/iter (+/- 19)
test yuv420p12_to_rgb_u16_row/u16_simd/1920 ... bench:       1,527 ns/iter (+/- 1)
test yuv420p12_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,565 ns/iter (+/- 27)
test yuv420p12_to_rgb_u16_row/u16_simd/3840 ... bench:       3,064 ns/iter (+/- 5)
test yuv420p14_to_rgb_row/u8_scalar/1280 ... bench:       4,731 ns/iter (+/- 115)
test yuv420p14_to_rgb_row/u8_simd/1280 ... bench:         990 ns/iter (+/- 1)
test yuv420p14_to_rgb_row/u8_scalar/1920 ... bench:       7,103 ns/iter (+/- 13)
test yuv420p14_to_rgb_row/u8_simd/1920 ... bench:       1,484 ns/iter (+/- 1)
test yuv420p14_to_rgb_row/u8_scalar/3840 ... bench:      14,300 ns/iter (+/- 39)
test yuv420p14_to_rgb_row/u8_simd/3840 ... bench:       2,970 ns/iter (+/- 14)
test yuv420p14_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,796 ns/iter (+/- 9)
test yuv420p14_to_rgb_u16_row/u16_simd/1280 ... bench:       1,021 ns/iter (+/- 3)
test yuv420p14_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,211 ns/iter (+/- 17)
test yuv420p14_to_rgb_u16_row/u16_simd/1920 ... bench:       1,526 ns/iter (+/- 2)
test yuv420p14_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,590 ns/iter (+/- 165)
test yuv420p14_to_rgb_u16_row/u16_simd/3840 ... bench:       3,069 ns/iter (+/- 3)

Benchmark Results for ubuntu-x86_64-scalar

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: scalar
  • Runner: GitHub Actions 1000009653
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_force_scalar
  • Date: 2026-04-19 12:12:47 UTC

all

test nv12_to_rgb_row/scalar/1280 ... bench:       4,503 ns/iter (+/- 20)
test nv12_to_rgb_row/simd/1280 ... bench:       4,741 ns/iter (+/- 91)
test nv12_to_rgb_row/scalar/1920 ... bench:       6,835 ns/iter (+/- 598)
test nv12_to_rgb_row/simd/1920 ... bench:       6,800 ns/iter (+/- 13)
test nv12_to_rgb_row/scalar/3840 ... bench:      13,563 ns/iter (+/- 34)
test nv12_to_rgb_row/simd/3840 ... bench:      13,596 ns/iter (+/- 49)
test nv21_to_rgb_row/scalar/1280 ... bench:       4,685 ns/iter (+/- 108)
test nv21_to_rgb_row/simd/1280 ... bench:       4,685 ns/iter (+/- 8)
test nv21_to_rgb_row/scalar/1920 ... bench:       6,793 ns/iter (+/- 25)
test nv21_to_rgb_row/simd/1920 ... bench:       6,798 ns/iter (+/- 19)
test nv21_to_rgb_row/scalar/3840 ... bench:      13,608 ns/iter (+/- 28)
test nv21_to_rgb_row/simd/3840 ... bench:      13,599 ns/iter (+/- 39)
test p010_to_rgb_row/u8_scalar/1280 ... bench:       4,591 ns/iter (+/- 19)
test p010_to_rgb_row/u8_simd/1280 ... bench:       4,602 ns/iter (+/- 36)
test p010_to_rgb_row/u8_scalar/1920 ... bench:       6,889 ns/iter (+/- 72)
test p010_to_rgb_row/u8_simd/1920 ... bench:       6,889 ns/iter (+/- 20)
test p010_to_rgb_row/u8_scalar/3840 ... bench:      13,858 ns/iter (+/- 258)
test p010_to_rgb_row/u8_simd/3840 ... bench:      13,817 ns/iter (+/- 41)
test p010_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,506 ns/iter (+/- 89)
test p010_to_rgb_u16_row/u16_simd/1280 ... bench:       4,505 ns/iter (+/- 12)
test p010_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,770 ns/iter (+/- 133)
test p010_to_rgb_u16_row/u16_simd/1920 ... bench:       6,773 ns/iter (+/- 31)
test p010_to_rgb_u16_row/u16_scalar/3840 ... bench:      13,544 ns/iter (+/- 327)
test p010_to_rgb_u16_row/u16_simd/3840 ... bench:      13,539 ns/iter (+/- 54)
test p012_to_rgb_row/u8_scalar/1280 ... bench:       4,462 ns/iter (+/- 91)
test p012_to_rgb_row/u8_simd/1280 ... bench:       4,458 ns/iter (+/- 10)
test p012_to_rgb_row/u8_scalar/1920 ... bench:       6,713 ns/iter (+/- 17)
test p012_to_rgb_row/u8_simd/1920 ... bench:       6,721 ns/iter (+/- 55)
test p012_to_rgb_row/u8_scalar/3840 ... bench:      13,480 ns/iter (+/- 119)
test p012_to_rgb_row/u8_simd/3840 ... bench:      13,478 ns/iter (+/- 327)
test p012_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,522 ns/iter (+/- 38)
test p012_to_rgb_u16_row/u16_simd/1280 ... bench:       4,550 ns/iter (+/- 38)
test p012_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,838 ns/iter (+/- 177)
test p012_to_rgb_u16_row/u16_simd/1920 ... bench:       6,877 ns/iter (+/- 32)
test p012_to_rgb_u16_row/u16_scalar/3840 ... bench:      13,795 ns/iter (+/- 41)
test p012_to_rgb_u16_row/u16_simd/3840 ... bench:      13,744 ns/iter (+/- 54)
test rgb_to_hsv_row/scalar/1280 ... bench:       4,572 ns/iter (+/- 60)
test rgb_to_hsv_row/simd/1280 ... bench:       4,571 ns/iter (+/- 12)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,857 ns/iter (+/- 70)
test rgb_to_hsv_row/simd/1920 ... bench:       6,852 ns/iter (+/- 13)
test rgb_to_hsv_row/scalar/3840 ... bench:      13,832 ns/iter (+/- 45)
test rgb_to_hsv_row/simd/3840 ... bench:      13,817 ns/iter (+/- 87)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,814 ns/iter (+/- 36)
test yuv_420_to_rgb_row/simd/1280 ... bench:       4,810 ns/iter (+/- 102)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       7,275 ns/iter (+/- 25)
test yuv_420_to_rgb_row/simd/1920 ... bench:       7,276 ns/iter (+/- 520)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      14,570 ns/iter (+/- 173)
test yuv_420_to_rgb_row/simd/3840 ... bench:      14,561 ns/iter (+/- 35)
test yuv420p10_to_rgb_row/u8_scalar/1280 ... bench:       4,818 ns/iter (+/- 10)
test yuv420p10_to_rgb_row/u8_simd/1280 ... bench:       5,011 ns/iter (+/- 151)
test yuv420p10_to_rgb_row/u8_scalar/1920 ... bench:       7,286 ns/iter (+/- 75)
test yuv420p10_to_rgb_row/u8_simd/1920 ... bench:       7,282 ns/iter (+/- 85)
test yuv420p10_to_rgb_row/u8_scalar/3840 ... bench:      14,629 ns/iter (+/- 39)
test yuv420p10_to_rgb_row/u8_simd/3840 ... bench:      14,635 ns/iter (+/- 35)
test yuv420p10_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,633 ns/iter (+/- 18)
test yuv420p10_to_rgb_u16_row/u16_simd/1280 ... bench:       4,631 ns/iter (+/- 22)
test yuv420p10_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,038 ns/iter (+/- 38)
test yuv420p10_to_rgb_u16_row/u16_simd/1920 ... bench:       7,006 ns/iter (+/- 35)
test yuv420p10_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,144 ns/iter (+/- 73)
test yuv420p10_to_rgb_u16_row/u16_simd/3840 ... bench:      14,164 ns/iter (+/- 79)
test yuv420p12_to_rgb_row/u8_scalar/1280 ... bench:       4,785 ns/iter (+/- 20)
test yuv420p12_to_rgb_row/u8_simd/1280 ... bench:       4,786 ns/iter (+/- 223)
test yuv420p12_to_rgb_row/u8_scalar/1920 ... bench:       7,236 ns/iter (+/- 36)
test yuv420p12_to_rgb_row/u8_simd/1920 ... bench:       7,237 ns/iter (+/- 32)
test yuv420p12_to_rgb_row/u8_scalar/3840 ... bench:      14,512 ns/iter (+/- 52)
test yuv420p12_to_rgb_row/u8_simd/3840 ... bench:      14,515 ns/iter (+/- 36)
test yuv420p12_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,659 ns/iter (+/- 16)
test yuv420p12_to_rgb_u16_row/u16_simd/1280 ... bench:       4,662 ns/iter (+/- 20)
test yuv420p12_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,992 ns/iter (+/- 41)
test yuv420p12_to_rgb_u16_row/u16_simd/1920 ... bench:       6,986 ns/iter (+/- 24)
test yuv420p12_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,073 ns/iter (+/- 276)
test yuv420p12_to_rgb_u16_row/u16_simd/3840 ... bench:      14,071 ns/iter (+/- 89)
test yuv420p14_to_rgb_row/u8_scalar/1280 ... bench:       4,909 ns/iter (+/- 37)
test yuv420p14_to_rgb_row/u8_simd/1280 ... bench:       4,914 ns/iter (+/- 20)
test yuv420p14_to_rgb_row/u8_scalar/1920 ... bench:       7,356 ns/iter (+/- 31)
test yuv420p14_to_rgb_row/u8_simd/1920 ... bench:       7,343 ns/iter (+/- 15)
test yuv420p14_to_rgb_row/u8_scalar/3840 ... bench:      14,808 ns/iter (+/- 34)
test yuv420p14_to_rgb_row/u8_simd/3840 ... bench:      14,819 ns/iter (+/- 53)
test yuv420p14_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,846 ns/iter (+/- 15)
test yuv420p14_to_rgb_u16_row/u16_simd/1280 ... bench:       4,844 ns/iter (+/- 10)
test yuv420p14_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,291 ns/iter (+/- 16)
test yuv420p14_to_rgb_u16_row/u16_simd/1920 ... bench:       7,288 ns/iter (+/- 47)
test yuv420p14_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,592 ns/iter (+/- 40)
test yuv420p14_to_rgb_u16_row/u16_simd/3840 ... bench:      14,599 ns/iter (+/- 38)

Benchmark Results for ubuntu-x86_64-sse41-max

System Information

  • OS: ubuntu-latest
  • Arch: x86_64
  • SIMD tier: sse41-max
  • Runner: GitHub Actions 1000009651
  • Runner arch (GH): X64
  • RUSTFLAGS: --cfg colconv_disable_avx512 --cfg colconv_disable_avx2
  • Date: 2026-04-19 12:13:09 UTC

all

test nv12_to_rgb_row/scalar/1280 ... bench:       4,621 ns/iter (+/- 66)
test nv12_to_rgb_row/simd/1280 ... bench:         885 ns/iter (+/- 1)
test nv12_to_rgb_row/scalar/1920 ... bench:       6,941 ns/iter (+/- 148)
test nv12_to_rgb_row/simd/1920 ... bench:       1,332 ns/iter (+/- 4)
test nv12_to_rgb_row/scalar/3840 ... bench:      13,929 ns/iter (+/- 500)
test nv12_to_rgb_row/simd/3840 ... bench:       2,661 ns/iter (+/- 4)
test nv21_to_rgb_row/scalar/1280 ... bench:       4,822 ns/iter (+/- 14)
test nv21_to_rgb_row/simd/1280 ... bench:         880 ns/iter (+/- 2)
test nv21_to_rgb_row/scalar/1920 ... bench:       6,963 ns/iter (+/- 102)
test nv21_to_rgb_row/simd/1920 ... bench:       1,324 ns/iter (+/- 23)
test nv21_to_rgb_row/scalar/3840 ... bench:      13,824 ns/iter (+/- 67)
test nv21_to_rgb_row/simd/3840 ... bench:       2,645 ns/iter (+/- 8)
test p010_to_rgb_row/u8_scalar/1280 ... bench:       4,762 ns/iter (+/- 29)
test p010_to_rgb_row/u8_simd/1280 ... bench:         945 ns/iter (+/- 1)
test p010_to_rgb_row/u8_scalar/1920 ... bench:       7,138 ns/iter (+/- 21)
test p010_to_rgb_row/u8_simd/1920 ... bench:       1,422 ns/iter (+/- 1)
test p010_to_rgb_row/u8_scalar/3840 ... bench:      14,268 ns/iter (+/- 116)
test p010_to_rgb_row/u8_simd/3840 ... bench:       2,841 ns/iter (+/- 6)
test p010_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,520 ns/iter (+/- 107)
test p010_to_rgb_u16_row/u16_simd/1280 ... bench:       1,153 ns/iter (+/- 1)
test p010_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,110 ns/iter (+/- 142)
test p010_to_rgb_u16_row/u16_simd/1920 ... bench:       1,737 ns/iter (+/- 2)
test p010_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,184 ns/iter (+/- 229)
test p010_to_rgb_u16_row/u16_simd/3840 ... bench:       3,478 ns/iter (+/- 4)
test p012_to_rgb_row/u8_scalar/1280 ... bench:       4,630 ns/iter (+/- 9)
test p012_to_rgb_row/u8_simd/1280 ... bench:         942 ns/iter (+/- 4)
test p012_to_rgb_row/u8_scalar/1920 ... bench:       6,973 ns/iter (+/- 17)
test p012_to_rgb_row/u8_simd/1920 ... bench:       1,412 ns/iter (+/- 3)
test p012_to_rgb_row/u8_scalar/3840 ... bench:      13,968 ns/iter (+/- 38)
test p012_to_rgb_row/u8_simd/3840 ... bench:       2,821 ns/iter (+/- 3)
test p012_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,508 ns/iter (+/- 156)
test p012_to_rgb_u16_row/u16_simd/1280 ... bench:       1,164 ns/iter (+/- 2)
test p012_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,779 ns/iter (+/- 15)
test p012_to_rgb_u16_row/u16_simd/1920 ... bench:       1,753 ns/iter (+/- 2)
test p012_to_rgb_u16_row/u16_scalar/3840 ... bench:      13,605 ns/iter (+/- 641)
test p012_to_rgb_u16_row/u16_simd/3840 ... bench:       3,511 ns/iter (+/- 4)
test rgb_to_hsv_row/scalar/1280 ... bench:       4,627 ns/iter (+/- 86)
test rgb_to_hsv_row/simd/1280 ... bench:       2,562 ns/iter (+/- 2)
test rgb_to_hsv_row/scalar/1920 ... bench:       6,939 ns/iter (+/- 139)
test rgb_to_hsv_row/simd/1920 ... bench:       3,848 ns/iter (+/- 4)
test rgb_to_hsv_row/scalar/3840 ... bench:      13,921 ns/iter (+/- 106)
test rgb_to_hsv_row/simd/3840 ... bench:       7,692 ns/iter (+/- 9)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       4,582 ns/iter (+/- 9)
test yuv_420_to_rgb_row/simd/1280 ... bench:         904 ns/iter (+/- 1)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       6,932 ns/iter (+/- 19)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,359 ns/iter (+/- 43)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      13,850 ns/iter (+/- 56)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,710 ns/iter (+/- 5)
test yuv420p10_to_rgb_row/u8_scalar/1280 ... bench:       4,633 ns/iter (+/- 104)
test yuv420p10_to_rgb_row/u8_simd/1280 ... bench:         841 ns/iter (+/- 1)
test yuv420p10_to_rgb_row/u8_scalar/1920 ... bench:       6,997 ns/iter (+/- 20)
test yuv420p10_to_rgb_row/u8_simd/1920 ... bench:       1,263 ns/iter (+/- 5)
test yuv420p10_to_rgb_row/u8_scalar/3840 ... bench:      14,069 ns/iter (+/- 162)
test yuv420p10_to_rgb_row/u8_simd/3840 ... bench:       2,519 ns/iter (+/- 6)
test yuv420p10_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,825 ns/iter (+/- 31)
test yuv420p10_to_rgb_u16_row/u16_simd/1280 ... bench:       1,105 ns/iter (+/- 4)
test yuv420p10_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,312 ns/iter (+/- 53)
test yuv420p10_to_rgb_u16_row/u16_simd/1920 ... bench:       1,658 ns/iter (+/- 2)
test yuv420p10_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,778 ns/iter (+/- 29)
test yuv420p10_to_rgb_u16_row/u16_simd/3840 ... bench:       3,314 ns/iter (+/- 40)
test yuv420p12_to_rgb_row/u8_scalar/1280 ... bench:       4,617 ns/iter (+/- 25)
test yuv420p12_to_rgb_row/u8_simd/1280 ... bench:         819 ns/iter (+/- 1)
test yuv420p12_to_rgb_row/u8_scalar/1920 ... bench:       6,998 ns/iter (+/- 85)
test yuv420p12_to_rgb_row/u8_simd/1920 ... bench:       1,232 ns/iter (+/- 2)
test yuv420p12_to_rgb_row/u8_scalar/3840 ... bench:      14,004 ns/iter (+/- 223)
test yuv420p12_to_rgb_row/u8_simd/3840 ... bench:       2,456 ns/iter (+/- 3)
test yuv420p12_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,983 ns/iter (+/- 62)
test yuv420p12_to_rgb_u16_row/u16_simd/1280 ... bench:       1,103 ns/iter (+/- 34)
test yuv420p12_to_rgb_u16_row/u16_scalar/1920 ... bench:       7,520 ns/iter (+/- 99)
test yuv420p12_to_rgb_u16_row/u16_simd/1920 ... bench:       1,658 ns/iter (+/- 1)
test yuv420p12_to_rgb_u16_row/u16_scalar/3840 ... bench:      14,489 ns/iter (+/- 160)
test yuv420p12_to_rgb_u16_row/u16_simd/3840 ... bench:       3,313 ns/iter (+/- 4)
test yuv420p14_to_rgb_row/u8_scalar/1280 ... bench:       5,008 ns/iter (+/- 24)
test yuv420p14_to_rgb_row/u8_simd/1280 ... bench:         819 ns/iter (+/- 2)
test yuv420p14_to_rgb_row/u8_scalar/1920 ... bench:       7,232 ns/iter (+/- 22)
test yuv420p14_to_rgb_row/u8_simd/1920 ... bench:       1,232 ns/iter (+/- 2)
test yuv420p14_to_rgb_row/u8_scalar/3840 ... bench:      14,501 ns/iter (+/- 99)
test yuv420p14_to_rgb_row/u8_simd/3840 ... bench:       2,457 ns/iter (+/- 13)
test yuv420p14_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,570 ns/iter (+/- 9)
test yuv420p14_to_rgb_u16_row/u16_simd/1280 ... bench:       1,103 ns/iter (+/- 1)
test yuv420p14_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,872 ns/iter (+/- 30)
test yuv420p14_to_rgb_u16_row/u16_simd/1920 ... bench:       1,659 ns/iter (+/- 4)
test yuv420p14_to_rgb_u16_row/u16_scalar/3840 ... bench:      13,818 ns/iter (+/- 31)
test yuv420p14_to_rgb_u16_row/u16_simd/3840 ... bench:       3,314 ns/iter (+/- 3)

Benchmark Results for windows-x86_64-default

System Information

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

all

test nv12_to_rgb_row/scalar/1280 ... bench:       3,618 ns/iter (+/- 560)
test nv12_to_rgb_row/simd/1280 ... bench:         763 ns/iter (+/- 5)
test nv12_to_rgb_row/scalar/1920 ... bench:       5,387 ns/iter (+/- 2,085)
test nv12_to_rgb_row/simd/1920 ... bench:       1,141 ns/iter (+/- 19)
test nv12_to_rgb_row/scalar/3840 ... bench:      10,731 ns/iter (+/- 484)
test nv12_to_rgb_row/simd/3840 ... bench:       2,277 ns/iter (+/- 61)
test nv21_to_rgb_row/scalar/1280 ... bench:       3,712 ns/iter (+/- 74)
test nv21_to_rgb_row/simd/1280 ... bench:         778 ns/iter (+/- 36)
test nv21_to_rgb_row/scalar/1920 ... bench:       5,573 ns/iter (+/- 98)
test nv21_to_rgb_row/simd/1920 ... bench:       1,168 ns/iter (+/- 6)
test nv21_to_rgb_row/scalar/3840 ... bench:      11,025 ns/iter (+/- 1,323)
test nv21_to_rgb_row/simd/3840 ... bench:       2,330 ns/iter (+/- 107)
test p010_to_rgb_row/u8_scalar/1280 ... bench:       3,773 ns/iter (+/- 248)
test p010_to_rgb_row/u8_simd/1280 ... bench:         678 ns/iter (+/- 10)
test p010_to_rgb_row/u8_scalar/1920 ... bench:       5,795 ns/iter (+/- 820)
test p010_to_rgb_row/u8_simd/1920 ... bench:       1,014 ns/iter (+/- 3)
test p010_to_rgb_row/u8_scalar/3840 ... bench:      11,335 ns/iter (+/- 374)
test p010_to_rgb_row/u8_simd/3840 ... bench:       2,019 ns/iter (+/- 89)
test p010_to_rgb_u16_row/u16_scalar/1280 ... bench:       3,931 ns/iter (+/- 37)
test p010_to_rgb_u16_row/u16_simd/1280 ... bench:       1,247 ns/iter (+/- 11)
test p010_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,193 ns/iter (+/- 328)
test p010_to_rgb_u16_row/u16_simd/1920 ... bench:       1,863 ns/iter (+/- 5)
test p010_to_rgb_u16_row/u16_scalar/3840 ... bench:      11,997 ns/iter (+/- 509)
test p010_to_rgb_u16_row/u16_simd/3840 ... bench:       3,724 ns/iter (+/- 21)
test p012_to_rgb_row/u8_scalar/1280 ... bench:       4,030 ns/iter (+/- 134)
test p012_to_rgb_row/u8_simd/1280 ... bench:         665 ns/iter (+/- 4)
test p012_to_rgb_row/u8_scalar/1920 ... bench:       6,085 ns/iter (+/- 741)
test p012_to_rgb_row/u8_simd/1920 ... bench:       1,001 ns/iter (+/- 4)
test p012_to_rgb_row/u8_scalar/3840 ... bench:      12,167 ns/iter (+/- 423)
test p012_to_rgb_row/u8_simd/3840 ... bench:       1,998 ns/iter (+/- 14)
test p012_to_rgb_u16_row/u16_scalar/1280 ... bench:       3,750 ns/iter (+/- 349)
test p012_to_rgb_u16_row/u16_simd/1280 ... bench:       1,238 ns/iter (+/- 5)
test p012_to_rgb_u16_row/u16_scalar/1920 ... bench:       5,660 ns/iter (+/- 181)
test p012_to_rgb_u16_row/u16_simd/1920 ... bench:       1,865 ns/iter (+/- 24)
test p012_to_rgb_u16_row/u16_scalar/3840 ... bench:      11,323 ns/iter (+/- 223)
test p012_to_rgb_u16_row/u16_simd/3840 ... bench:       4,189 ns/iter (+/- 297)
test rgb_to_hsv_row/scalar/1280 ... bench:       5,518 ns/iter (+/- 1,290)
test rgb_to_hsv_row/simd/1280 ... bench:       4,442 ns/iter (+/- 300)
test rgb_to_hsv_row/scalar/1920 ... bench:       7,825 ns/iter (+/- 1,177)
test rgb_to_hsv_row/simd/1920 ... bench:       5,471 ns/iter (+/- 102)
test rgb_to_hsv_row/scalar/3840 ... bench:      14,502 ns/iter (+/- 1,705)
test rgb_to_hsv_row/simd/3840 ... bench:      10,963 ns/iter (+/- 192)
test yuv_420_to_rgb_row/scalar/1280 ... bench:       3,779 ns/iter (+/- 186)
test yuv_420_to_rgb_row/simd/1280 ... bench:         706 ns/iter (+/- 3,304)
test yuv_420_to_rgb_row/scalar/1920 ... bench:       5,725 ns/iter (+/- 561)
test yuv_420_to_rgb_row/simd/1920 ... bench:       1,041 ns/iter (+/- 11)
test yuv_420_to_rgb_row/scalar/3840 ... bench:      11,422 ns/iter (+/- 1,146)
test yuv_420_to_rgb_row/simd/3840 ... bench:       2,086 ns/iter (+/- 25)
test yuv420p10_to_rgb_row/u8_scalar/1280 ... bench:       4,081 ns/iter (+/- 409)
test yuv420p10_to_rgb_row/u8_simd/1280 ... bench:         656 ns/iter (+/- 11)
test yuv420p10_to_rgb_row/u8_scalar/1920 ... bench:       6,048 ns/iter (+/- 526)
test yuv420p10_to_rgb_row/u8_simd/1920 ... bench:         983 ns/iter (+/- 15)
test yuv420p10_to_rgb_row/u8_scalar/3840 ... bench:      12,067 ns/iter (+/- 749)
test yuv420p10_to_rgb_row/u8_simd/3840 ... bench:       1,965 ns/iter (+/- 23)
test yuv420p10_to_rgb_u16_row/u16_scalar/1280 ... bench:       4,022 ns/iter (+/- 405)
test yuv420p10_to_rgb_u16_row/u16_simd/1280 ... bench:       1,220 ns/iter (+/- 5)
test yuv420p10_to_rgb_u16_row/u16_scalar/1920 ... bench:       6,019 ns/iter (+/- 531)
test yuv420p10_to_rgb_u16_row/u16_simd/1920 ... bench:       1,824 ns/iter (+/- 11)
test yuv420p10_to_rgb_u16_row/u16_scalar/3840 ... bench:      12,137 ns/iter (+/- 1,053)
test yuv420p10_to_rgb_u16_row/u16_simd/3840 ... bench:       3,667 ns/iter (+/- 52)
test yuv420p12_to_rgb_row/u8_scalar/1280 ... bench:       4,025 ns/iter (+/- 167)
test yuv420p12_to_rgb_row/u8_simd/1280 ... bench:         657 ns/iter (+/- 2)
test yuv420p12_to_rgb_row/u8_scalar/1920 ... bench:       6,065 ns/iter (+/- 126)
test yuv420p12_to_rgb_row/u8_simd/1920 ... bench:         981 ns/iter (+/- 4)
test yuv420p12_to_rgb_row/u8_scalar/3840 ... bench:      12,127 ns/iter (+/- 370)
test yuv420p12_to_rgb_row/u8_simd/3840 ... bench:       1,963 ns/iter (+/- 18)
test yuv420p12_to_rgb_u16_row/u16_scalar/1280 ... bench:       3,744 ns/iter (+/- 38)
test yuv420p12_to_rgb_u16_row/u16_simd/1280 ... bench:       1,220 ns/iter (+/- 5)
test yuv420p12_to_rgb_u16_row/u16_scalar/1920 ... bench:       5,668 ns/iter (+/- 75)
test yuv420p12_to_rgb_u16_row/u16_simd/1920 ... bench:       1,828 ns/iter (+/- 4)
test yuv420p12_to_rgb_u16_row/u16_scalar/3840 ... bench:      11,311 ns/iter (+/- 173)
test yuv420p12_to_rgb_u16_row/u16_simd/3840 ... bench:       3,650 ns/iter (+/- 31)
test yuv420p14_to_rgb_row/u8_scalar/1280 ... bench:       3,728 ns/iter (+/- 41)
test yuv420p14_to_rgb_row/u8_simd/1280 ... bench:         655 ns/iter (+/- 5)
test yuv420p14_to_rgb_row/u8_scalar/1920 ... bench:       5,578 ns/iter (+/- 53)
test yuv420p14_to_rgb_row/u8_simd/1920 ... bench:         990 ns/iter (+/- 4)
test yuv420p14_to_rgb_row/u8_scalar/3840 ... bench:      11,214 ns/iter (+/- 162)
test yuv420p14_to_rgb_row/u8_simd/3840 ... bench:       1,966 ns/iter (+/- 14)
test yuv420p14_to_rgb_u16_row/u16_scalar/1280 ... bench:       3,969 ns/iter (+/- 104)
test yuv420p14_to_rgb_u16_row/u16_simd/1280 ... bench:       1,223 ns/iter (+/- 17)
test yuv420p14_to_rgb_u16_row/u16_scalar/1920 ... bench:       5,946 ns/iter (+/- 156)
test yuv420p14_to_rgb_u16_row/u16_simd/1920 ... bench:       1,829 ns/iter (+/- 32)
test yuv420p14_to_rgb_u16_row/u16_scalar/3840 ... bench:      12,031 ns/iter (+/- 414)
test yuv420p14_to_rgb_u16_row/u16_simd/3840 ... bench:       3,659 ns/iter (+/- 22)

View detailed results

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

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