gamut-dsp
gamut-dsp holds the shared digital signal processing routines for the gamut codecs — the
transforms, quantization, and filtering the format crates call into.
Goals
Part of the gamut workspace, this crate exists to:
- Keep the math in one place. Transforms and related DSP are implemented and tested once here, rather than re-derived inside each codec, so a numerical bug is fixed for every format at once.
- Track the spec exactly. Routines are implemented clean-slate from the official specs (see
../../references/) — the M0 pair is the AV1 lossless 4×4 Walsh–Hadamard transform ([fwht4x4] / [iwht4x4]), the exact inverse the AV1 decoder expects. - Stay allocation-conscious. The transforms operate on fixed-size
[i32; 16]arrays with no heap allocation in the hot path. - Stay memory-safe.
#![forbid(unsafe_code)].
Usage
use ;
// The forward/inverse 4x4 Walsh-Hadamard transform round-trips exactly (lossless).
let residual = ;
let coeffs = fwht4x4;
let restored = iwht4x4;
assert_eq!;
Status
M0 provides the lossless 4×4 Walsh–Hadamard transform pair used by AV1 lossless intra coding. The
discrete cosine / asymmetric discrete sine transforms used by lossy AV1 coding (AV1
§7.13.2.2–.9), plus quantization and in-loop filtering, are deferred to milestone M1 (see
gamut-avif/STATUS.md).
Roadmap
- M1: lossy DCT/ADST transform family and quantization.
- Later: filtering primitives and (where it pays off) SIMD-optimized variants.
License
Licensed under either of MIT or Apache-2.0 at your option.