All notable changes to this project will be documented in this file. This project adheres to Semantic Versioning.
- Added a WASM SIMD implementation.
- Allow reading the XMP packet.
- Admit more precision values in JPEG Lossless.
- The MSRV policy is now managed by the
rust-version
field inCargo.toml
. - The color transform can now be overridden as well as hinted with
Decoder::set_color_transform
.
- Another fix to allow usage in WASM target.
- Decoding in the WASM target is now actively tested in CI.
- Fix single threaded usage in WASM target.
- Corrects minimal version requirements of dependency
rayon
.
- Added
Decoder::set_max_decoding_buffer_size
which limits the bytes allocated for the output of the decoding process. - Added Arm64-Neon intrinsic implementation of idct and color conversion. This
depends on a Rust nightly compiler feature (
aarch64_target_feature
) and it must be explicitly enabled. As soon as the minimum supported Rust version includes the stabilization of this feature, the code will be enabled by default and the feature changed to do nothing.
- Added and SSE3-specific SIMD intrinsic implementation for idct and color conversion. It will run if applicable targets are detect at runtime.
- The SIMD implementation is not bit-for-bit compatible with non-SIMD output.
You can enable the
platform_independent
feature, to ensure that only bit-for-bit equivalent code runs and output is the same on all platforms. - Improved performance some more by avoiding bounds checks with array types.
- Multithreading is now used more frequently, without the rayon target, except on an explicit list of unsupported platforms.
- Fix decoding error due to conflict of lossless with some spectral selections.
- Added Lossless JPEG support
- Added support for EXIF and ICC data
- Minimum supported rust version changed to 1.48 and no formal policy for bump releases for now
- Minor stability fixes on invalid jpeg images
- Fix panic on jpeg without frames.
- Fix incorrect order of MCUs in non-interleaved streams
- DCT Progressive images with incomplete coefficient blocks are now rendered
- Fix a panic on invalid dimensions
- Reduce allocations and runtime of decoding
- Rework multi-threading to run a thread per component
- Fix decoding of some progressive images failing
- Several more performance improvements
- Add
PixelFormat::pixel_bytes
to determine the size of pixels - Cleanup and clarification of the 8x8 idct implementation
- Updated fuzzing harnesses and helpers
- Fix decoding returning too much image data
- Fix recognizing padding in marker segments
- Several decode performance improvements
- Remove use of deprecated
Error::description
- Fix two bugs causing panics introduced in 0.1.17.
- Minimum supported rust version changed to 1.34
- Fix clippy::into_iter_on_array warning
- Ignore extraneous bytes after SOS
- Support IDCT Scaling
- Minimum supported rust version changed to 1.28
- Allow zero length DHT segments
- Added support for WebAssembly and asm.js (thanks @CryZe!)
- Bugfix for images with APP14 segments longer than 12 bytes.
- Updated
rayon
to 1.0.
- Updated
rayon
to 0.8.
- Fixed an integer overflow in
derive_huffman_codes
. - Updated
rayon
to 0.7.
- Fixed an integer overflow.
- Updated
byteorder
to 1.0.
- Updated
rayon
to 0.6
- Added a generic integer upsampler, which brings support for some unusual subsampling schemes, e.g. 4:1:1 (thanks @iamrohit7!)
- Made rayon optional through the
rayon
cargo feature (thanks @jackpot51!)
- Updated rayon to version 0.5.
- Added
UnsupportedFeature::NonIntegerSubsamplingRatio
error - Fixed a bug which could cause certain images to fail decoding
- Fixed decoding of JPEGs which has a final RST marker in their entropy-coded data
- Avoid allocating coefficients when calling
read_info()
on progressive JPEGs
- Added support for 16-bit quantization tables (even though the JPEG spec explicitly states "An 8-bit DCT-based process shall not use a 16-bit precision quantization table", but since libjpeg allows it there is little choice...)
- Added support for decoding files with extraneous data (this violates the JPEG spec, but libjpeg allows it)
- Fixed panic when decoding files without SOF
- Fixed bug which caused files with certain APP marker segments to fail decoding
- Removed
euclid
andnum-rational
dependencies - Updated
rayon
to 0.4
- Replaced
num
withnum-rational
- Updated
byteorder
to 0.5
- Fixed a bug which was causing some progressive JPEGs to fail decoding
- Performance improvements
- Performance improvements
- Initial release