No description
Find a file
2022-01-06 02:49:15 +03:00
.github/workflows Pull in upstream qoi submodule in CI 2022-01-05 17:26:05 +03:00
assets Add assets for tests and reference checks 2021-12-29 20:56:07 +03:00
bench qoi-bench: minor formatting and cosmetic fixes 2022-01-05 17:16:41 +03:00
doc Add qoi format specification pdf to the repo 2022-01-03 14:25:40 +03:00
ext (Update the upstream qoi submodule) 2021-12-29 20:56:30 +03:00
fuzz Big batch of renames: strip qoi prefix everywhere 2022-01-03 21:40:24 +03:00
libqoi Add libqoi helper crate that wraps qoi.h 2022-01-05 17:07:30 +03:00
src Index bugfix: force decoder index to be 4-channel 2022-01-06 02:49:15 +03:00
tests tests: add generated image tests 2022-01-05 17:17:42 +03:00
.gitignore (Add fuzz coverage to .gitignore) 2022-01-03 21:57:41 +03:00
.gitmodules Add reference implementation as a submodule 2021-11-29 04:21:09 +00:00
Cargo.toml tests: add generated image tests 2022-01-05 17:17:42 +03:00
LICENSE-APACHE Add license files 2022-01-03 14:25:40 +03:00
LICENSE-MIT Add license files 2022-01-03 14:25:40 +03:00
README.md Add a paragraph to readme/lib.rs re: MSRV 2022-01-04 14:52:45 +03:00
rustfmt.toml Initial working version (but lots of temp stuff) 2021-11-28 16:20:24 +00:00

qoi-fast

Build Latest Version Documentation Apache 2.0 MIT unsafe forbidden

Fast encoder/decoder for QOI image format, implemented in pure and safe Rust.

  • One of the fastest QOI encoders/decoders out there.
  • Compliant with the latest QOI format specification.
  • Zero unsafe code.
  • Supports decoding from / encoding to std::io streams directly.
  • no_std support.
  • Roundtrip-tested vs the reference C implementation; fuzz-tested.

Examples

use qoi_fast::{encode_to_vec, decode_to_vec};

let encoded = encode_to_vec(&pixels, width, height)?;
let (header, decoded) = decode_to_vec(&encoded)?;

assert_eq!(header.width, width);
assert_eq!(header.height, height);
assert_eq!(decoded, pixels);

Benchmarks

Comparison to the reference C implementation (as of 00e34217), benchmarks timings collected on Apple M1 (1782 images, 1187 MB total):

codec          decode:ms    encode:ms  decode:mp/s  encode:mp/s

qoi-c            4389.75      5524.18        283.5        225.3
qoi-fast         3026.68      4304.26        411.2        289.2

Benchmarks have also been run for all of the other Rust implementations of QOI for comparison purposes and, at the time of writing this document, this library proved to be the fastest one by a noticeable margin.

Rust version

The minimum required Rust version is 1.51.0 (any changes to this would be considered to be a breaking change).

no_std

This crate supports no_std mode. By default, std is enabled via the std feature. You can deactivate the default-features to target core instead. In that case anything related to std::io, std::error::Error and heap allocations is disabled. There is an additional alloc feature that can be activated to bring back the support for heap allocations.

License

This project is dual-licensed under MIT and Apache 2.0.