fparkan/vendor/tiff/CHANGES.md
Valentin Popov 1b6a04ca55
Initial vendor packages
Signed-off-by: Valentin Popov <valentin@popov.link>
2024-01-08 01:21:28 +04:00

8.3 KiB
Raw Blame History

Version 0.9.0

New features:

  • Added support for photometric interpretation YCbCr and added related ColorType.

Fixes:

  • Decoding tiled images calculates padding correctly when image width or height is a multiple of tile size. It could previously corrupt the last tile per row by skipping over data.

Version 0.8.1

Changes:

  • The jpeg decoder gained to ability to utilize the Photometric Interpretation directly instead of relying on a custom APP segment.

Fixes:

  • A spurious error within the PackBits decoder lead to the incorrect results (wrong bits or errors), based on the maximum size of reads from the underlying reader.
  • Removed a panic path in jpeg decoding, when a feature such as photometric interpretation is not supported. An error is returned instead.

Version 0.8.0

Changes:

  • The minimum supported rust version is now indicated in Cargo.toml.
  • The enums TiffFormatError and TiffUnsupportedError are now marked with the #[non_exhaustive] attribute.
  • Additionally, tag related enums Value, Tags, Type, CompressionMethod, PhotometricInterpretation, PlanarConfiguration, Predictor, ResolutionUnit, SampleFormat are also changed.

Removals:

  • Removed deprecated methods of Decoder: init, read_jpeg, read_strip_to_buffer, read_strip, read_tile. The implicit chunk (row or tile) index order could not be easily tracked by the caller. New separate utility interfaces may be introduced at a later point, for now callers are obligated to choose their own.

Fixes:

  • Update to jpeg_decoder = 0.3.

Version 0.7.4

New features:

  • Creating an encoder for invalid, zero-sized images is now rejected.

Fixes:

  • Fix panic, in a case where decoding jpeg encoded images did not expect the jpeg decoder to return an error.
  • Fix panic by validating rows_per_strip better, fixing a division-by-zero.

Version 0.7.3

New features:

  • Allow decoder to access specific tiles by index.
  • Add support for floating point predictor.
  • Tiled jpeg file support.

Changes:

  • Various refactoring and performance improvements.

Version 0.7.2

New features:

  • Encoding with ImageEncoder now takes an optional compressor argument, allowing compressed encoding. See the methods TiffEncoder::{new_image,write_image}_with_compression.
  • jpeg_decoder has been upgraded, now supports lossless JPEG.

Changes:

  • Decoding now more consistently reads and interprets the initial IFD, instead of performing some interpretation lazily. (This change prepares fully lazy and backwards seeking.)

Version 0.7.1

New features:

  • Encoding signed integer formats is now supported.
  • Extensive fuzzing with cargo fuzz.

Changes:

  • Tile decoding should be a little faster, requires one less intermediate buffer.
  • Images whose IFDs form a cycle due to their offsets will now raise an error when the cycle would be entered (jumping back should still be supported).

Fixes:

  • Fixed a regression that caused conflict between strips and tile images, causing errors in decoding some images.
  • Use checked integer arithmetic in limit calculations, fixes overflows.
  • IFD Tags are now always cleared between images.
  • Found by fuzzing: Several memory limit overflows; JPEG now correctly validates offsets and a minimum size of its table; Check upper limit of strip byte size correctly;

Notes: Our CI has warned that this version no longer builds on 1.34.2 out of the box. We're still committed to the MSRV on this major version yet one dependency—flate2—has already bumped it in a SemVer compatible version of its own. This is out-of-our-control (cargo's dependency resolution does not allow us to address this in a reasonable manner).

This can be address this by pinning the version of flate2 to 1.0.21 in your own files. However, you should understand that this puts you in considerable maintenance debt as you will no longer receive any updates for this dependency and any package that requires a new version of the 1.0 series would be incompatible with this requirement (cargo might yell at you very loudly).

Version 0.7.0

New features:

  • Support for encoding BigTiff (#122)
    • Breaking: Encoder types now have a generic parameter to differentiate BigTiff and standard Tiff encoding. Defaults to standard Tiff.
  • Basic tile decoding (#125)
    • Breaking: There is a new TiffError::UsageError variant.
  • Support for datatypes Int8 and Int16 (#114)
    • Breaking: DecodingResult and DecodingBuffer have the two new variants I8 and I16.
  • Support for i32 arrays (#118)
    • Breaking: DecodingResult and DecodingBuffer have a new I32 variant.
  • Support for Ifd and IfdBig tag types and I64 data type (#119)
    • Breaking: DecodingResult and DecodingBuffer have a new I64 variant.
  • Add SMinSampleValue and SMaxSampleValue (#123)

Changes:

  • Improve deflate support (#132) *Switch to streaming decompression via flate2. Aside from performance improvements and lower RAM consumption, this fixes a bug where max_uncompressed_length was precalculated for a single tile but then used as a hard limit on the whole data, failing to decompress any tiled images.
    • Add support for new Deflate tag in addition to OldDeflate.
  • Breaking: Remove InflateError, which is no longer needed with flate2 (#134)
  • Breaking: Support for MinIsWhite is restricted to unsigned and floating point values. This is expected to be be re-added once some contradictory interpretation regarding semantics for signed values is resolved.

Fixes:

  • Validate that ASCII tags are valid ASCII and end with a null byte (#121)

Internal:

  • Simplify decompression logic (#126)
  • Simplify expand_strip (#128)

Version 0.6.1

New features:

  • Support for reading u16 and ascii string tags.
  • Added Limits::unlimited for disabling all limits.
  • Added ImageEncoder::rows_per_strip to overwrite the default.

Changes:

  • The default strip size for chunked encoding is now 1MB, up from 8KB. This should lead to more efficient decoding and compression.

Fixes:

  • Fixed a bug where LZW compressed strips could not be decoded, instead returning an error Inconsistent sizes encountered.
  • Reading a tag with a complex type and a single value returns the proper Value variant, instead of a vector with one entry.

Version 0.6.0

New features:

  • Support for decoding BigTIFF with 64-bit offsets
  • The value types byte, f32, f64 are now recognized
  • Support for Modern JPEG encoded images

Improvements:

  • Better support for adding auxiliary tags before encoding image data
  • Switched to lzw decoder library weezl for performance
  • The ColorType trait now supports SAMPLE_ENCODING hints

Fixes:

  • Fixed decoding of inline ASCII in tags
  • Fixed handling after null terminator in ASCII data
  • Recognize tile and sample format tags

Version 0.5.0

  • Added support for 32-bit and 64-bit decoded values.
  • Added CMYK(16|32|64) color type support.
  • Check many internal integer conversions to increase stability. This should only lead to images being reported as faulty that would previously silently break platform limits. If there are any false positives, please report them.
  • Remove an erroneous check of decoded length in lzw compressed images.

Version 0.4.0

  • Several enumerations are now non_exhaustive for future extensions. These are Tag, Type, Value, PhotometricInterpretation, CompressionMethod, Predictor.
  • Enums gained a dedicated method to convert to their TIFF variant value with the specified type. Performing these conversions by casting the discriminant with as is not guaranteed to be stable, except where documented explicitly.
  • Removed the num-derive and num dependencies.
  • Added support for decoding deflate compressed images.
  • Make the decoder Limits customizable by exposing members.
  • Fixed multi-page TIFF encoding writing incorrect offsets.