Skip to content

v0.8.3

Choose a tag to compare

@lilith lilith released this 10 Apr 13:57
· 423 commits to main since this release

What's Changed

Features

  • Fused parallel JPEG encoder with optimized Huffman tables — a single-pass symbol stream architecture that captures DCT symbols during parallel quantization, merges frequency counts to build optimal Huffman tables, then remaps in parallel. On a 3840x2160 4:2:0 Q85 image: 4.43x speedup (36.4ms to 8.2ms) with 0.52% smaller output from R-D post-quantization optimization. API: EncoderConfig::encode_bytes_parallel(). Requires parallel feature, RGB8 input, baseline mode (08eb559)
    • Quality-scaled R-D lambda drops trailing coefficients where bit savings exceed perceptual cost
    • Symbol stream (4 bytes/symbol) is 8x smaller than coefficient storage, fits in L3 cache
    • Chunked parallelism at physical core count avoids SMT contention

Bug Fixes

  • Fix out-of-bounds access in progressive scanline buffer for single-component (grayscale) JPEGs — buffered_rgb stored 1 byte/pixel but BGR8, RGBA8/BGRA8, and RGBA-f32 output paths assumed 3 bytes/pixel (8868898, fixes #26)
  • Reject height=0 (DNL mode) in read_info() since header-only probing cannot resolve deferred height (8868898)
  • Fix false positive in fuzz_differential target — zune-jpeg returns grayscale natively (64 bytes for 8x8) while zenjpeg returns requested RGB (192 bytes), causing length-mismatch assertion. Now expands grayscale to RGB before comparison (268d5a2, fixes #27)
  • Remove 4 #[arcane]-annotated SIMD functions containing unimplemented!() (wasm_idct_int_8x8, wasm_ycbcr_to_rgb, neon_idct_int_8x8, neon_ycbcr_to_rgb) that would have panicked at runtime if dispatched (1ea2488)

Fuzz Hardening

  • Add fuzz infrastructure with differential target (zenjpeg vs zune-jpeg), roundtrip target, and decode-only target (292e6fc)
  • Add minimized regression seeds for the progressive scanline off-by-one crash (ad627ba)
  • Upgrade fuzz zune-jpeg 0.4 to 0.5, restore progressive coverage in differential target (04379c0)
  • Move curated fuzz seeds to fuzz/seeds/, gitignore bulk corpus (7f043aa)

Internal

  • Bump zencodec to 0.1.13
  • Resolve clippy warnings for all-features builds
  • Gitignore tooling noise, exclude noise files from packages

Full Changelog: v0.8.2...v0.8.3