libjxl

FORK: libjxl patches used on blog
git clone https://git.neptards.moe/blog/libjxl.git
Log | Files | Refs | Submodules | README | LICENSE

CHANGELOG.md (17247B)


      1 # Changelog
      2 
      3 All notable changes to this project will be documented in this file.
      4 
      5 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
      6 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
      7 
      8 ## [0.10.4] - 2024-11-26
      9 
     10 ### Fixed
     11   - Huffman lookup table size fix (#3871 -
     12     [CVE-2024-11403](https://www.cve.org/cverecord?id=CVE-2024-11403))
     13   - Check height limit in modular trees. (#3943 -
     14     [CVE-2024-11498](https://www.cve.org/cverecord?id=CVE-2024-11498))
     15 
     16 ## [0.10.3] - 2024-06-27
     17 
     18 ### Fixed
     19   - fix decoding of some special images (#3662)
     20 
     21 ## [0.10.2] - 2024-03-08
     22 
     23 ### Fixed
     24   - bugs in (lossless) encoding (#3367, #3359 and #3386)
     25   - re-enable installation of MIME file (#3375)
     26   - bugs in streaming mode (#3379 and #3380)
     27 
     28 ## [0.10.1] - 2024-02-28
     29 
     30 ### Fixed
     31  - reduce allocations (#3336 and #3339),
     32    fixing a significant speed regression present since 0.9.0
     33  - bug in streaming encoding (#3331)
     34 
     35 ##  [0.10.0] - 2024-02-21
     36 
     37 ### Added
     38  - decoder API: added `JxlDecoderGetBoxSizeContents` for getting the size of the
     39    content of a box without the headers.
     40  - encoder API: implemented new api functions for streaming encoding.
     41 
     42 ### Changed / clarified
     43  - decoder/encoder API: return failure when surface allocation fail
     44  - encoder API / cjxl: updated modular effort levels to faster settings; the
     45    effort range is now 1-10, with 11 available in advanced mode.
     46 
     47 ## [0.9.2] - 2024-02-07
     48 
     49 ### Fixed
     50  - bugs in the gdk-pixbuf plugin
     51  - some build issues
     52 
     53 ## [0.9.1] - 2024-01-08
     54 
     55 ### Fixed
     56  - multiple build issues
     57 
     58 ## [0.9.0] - 2023-12-22
     59 
     60 ### Added
     61  - encoder API: add `JxlEncoderSetExtraChannelDistance` to adjust the quality
     62    of extra channels (like alpha) separately.
     63  - encoder API: new api functions for streaming encoding:
     64   - `JxlEncoderSetOutputProcessor`
     65   - `JxlEncoderFlushInput`
     66   - `JxlEncoderOutputProcessor` struct
     67   - `JxlEncoderSetOutputCallback`
     68   - `JxlChunkedFrameInputSource` struct
     69   - `JxlEncoderAddChunkedFrame`
     70  - encoder API: new options for more fine-grained control over metadata
     71    preservation when using `JxlEncoderAddJPEGFrame`:
     72   - `JXL_ENC_FRAME_SETTING_JPEG_KEEP_EXIF`
     73   - `JXL_ENC_FRAME_SETTING_JPEG_KEEP_XMP`
     74   - `JXL_ENC_FRAME_SETTING_JPEG_KEEP_JUMBF`
     75  - encoder API: new function `JxlEncoderSetUpsamplingMode` to change the upsampling
     76    method, e.g. to use nearest-neighbor upsampling for pixel art
     77  - decoder API: implemented `JxlDecoderSetOutputColorProfile` and
     78    `JxlDecoderSetCms` to enable decoding to desired colorspace.
     79  - cjxl can now be used to explicitly add/update/strip Exif/XMP/JUMBF metadata using
     80    the decoder-hints syntax, e.g. `cjxl input.ppm -x exif=input.exif output.jxl`
     81  - djxl can now be used to extract Exif/XMP/JUMBF metadata
     82  - encoder API: new function `JxlEncoderDistanceFromQuality` for convenience to
     83    calculate a `distance` given a `quality`
     84 
     85 ### Removed
     86  - API: the Butteraugli API (`jxl/butteraugli.h`) was removed.
     87  - encoder and decoder API: all deprecated functions were removed:
     88    `JxlDecoderDefaultPixelFormat`, `JxlEncoderOptionsSetLossless`,
     89    `JxlEncoderOptionsSetEffort`, `JxlEncoderOptionsSetDecodingSpeed`,
     90    `JxlEncoderOptionsSetDistance`, `JxlEncoderOptionsCreate`, as well as
     91    the deprecated enumerator values `JXL_DEC_EXTENSIONS`, `JXL_ENC_NOT_SUPPORTED`,
     92    `JXL_TYPE_BOOLEAN`, `JXL_TYPE_UINT32`, and deprecated type `JxlEncoderOptions`.
     93  - decoder API: the signature of `JxlDecoderGetColorAsEncodedProfile`,
     94    `JxlDecoderGetICCProfileSize`, and `JxlDecoderGetColorAsICCProfile`
     95    changed: a deprecated unused argument was removed.
     96 
     97 ### Changed / clarified
     98  - changed the name of the cjxl flag `photon_noise` to `photon_noise_iso`
     99  - fixed how large boxes are decoded (#2958)
    100  - fixed encoding files with unreadable patches (#3042, #3046)
    101 
    102 ## [0.8.2] - 2023-06-14
    103 
    104 ### Changed
    105  - Security: Fix an integer underflow bug in patch decoding (#2551- CVE-2023-35790).
    106 
    107 ## [0.8.1] - 2023-02-03
    108 
    109 ### Changed
    110  - Allow fast-lossless for 16-bit float input (#2093)
    111  - Fix bug in palette (#2120)
    112  - Security: Fix OOB read in exif.h (#2101 - [CVE-2023-0645](https://www.cve.org/cverecord?id=CVE-2023-0645))
    113 
    114 ## [0.8.0] - 2023-01-18
    115 
    116 ### Added
    117  - decoder API: new function `JxlDecoderSetImageBitDepth` to set the bit depth
    118    of the output buffer.
    119  - decoder API proposal: add `JxlDecoderSetOutputColorProfile` and
    120    `JxlDecoderSetCms` to enable decoding to desired colorspace; NB: not
    121    implemented yet.
    122  - encoder API: new function `JxlEncoderSetFrameBitDepth` to set the bit depth
    123    of the input buffer.
    124  - encoder API: add an effort 10 option for lossless compression; using this
    125    setting requires calling `JxlEncoderAllowExpertOptions`.
    126  - encoder API: new `JXL_ENC_FRAME_SETTING_JPEG_COMPRESS_BOXES` enum value to
    127    allow explicit control of metadata compression
    128 
    129 ### Removed
    130  - common API: removed `JxlIntrinsicSizeHeader`
    131  - decoder API: removed deprecated `JXL_DEC_NEED_DC_OUT_BUFFER` and
    132    `JXL_DEC_DC_IMAGE` events, `JxlDecoderDCOutBufferSize` and
    133    `JxlDecoderSetDCOutBuffer` functions
    134 
    135 ### Changed / clarified
    136  - encoder API: `JxlEncoderProcessOutput` requires at least 32 bytes of output
    137    space to proceed and guarantees that at least one byte will be written
    138 
    139 ## [0.7] - 2022-07-21
    140 
    141 ### Added
    142  - Export version information in headers.
    143  - decoder API: Ability to decode the content of metadata boxes:
    144    `JXL_DEC_BOX`, `JXL_DEC_BOX_NEED_MORE_OUTPUT`, `JxlDecoderSetBoxBuffer`,
    145    `JxlDecoderGetBoxType`, `JxlDecoderGetBoxSizeRaw` and
    146    `JxlDecoderSetDecompressBoxes`.
    147  - decoder API: ability to mark the input is finished: `JxlDecoderCloseInput`.
    148  - decoder API: ability to request updates on different progressive events using
    149    `JxlDecoderSetProgressiveDetail`; currently supported events are
    150    `kDC`, `kLastPasses` and `kPasses`.
    151  - decoder API: ability to specify desired intensity target using
    152    `JxlDecoderSetDesiredIntensityTarget`
    153  - decoder API: new function `JxlDecoderSetCoalesced` to allow decoding
    154    non-coalesced (unblended) frames, e.g. layers of a composite still image
    155    or the cropped frames of a recompressed GIF/APNG.
    156  - decoder API: new function `JxlDecoderSetUnpremultiplyAlpha` to set
    157    preference for getting an associated alpha channel with premultiplied or
    158    unpremultiplied colors.
    159  - decoder API: field added to `JxlFrameHeader`: a `JxlLayerInfo` struct
    160    that contains crop dimensions and offsets and blending information for
    161    the non-coalesced case.
    162  - decoder API: new function `JxlDecoderGetExtraChannelBlendInfo` to get
    163    the blending information for extra channels in the non-coalesced case.
    164  - decoder API: new function `JxlDecoderSetMultithreadedImageOutCallback`,
    165    allowing output callbacks to receive more information about the number of
    166    threads on which they are running.
    167  - decoder API: new function `JxlDecoderSkipCurrentFrame` to skip processing
    168    the current frame after a progressive detail is reached.
    169  - decoder API: new function `JxlDecoderGetIntendedDownsamplingRatio` to get
    170    the intended downsampling ratio of progressive steps, based on the
    171    information in the frame header.
    172  - decoder API: new function `JxlDecoderSetRenderSpotcolors` to allow disabling
    173    rendering of spot colors.
    174  - decoder/encoder API: add two fields to `JXLBasicInfo`: `intrinsic_xsize`
    175    and `intrinsic_ysize` to signal the intrinsic size.
    176  - encoder API: ability to add metadata boxes, added new functions
    177    `JxlEncoderAddBox`, `JxlEncoderUseBoxes`, `JxlEncoderCloseBoxes` and
    178    `JxlEncoderCloseFrames`.
    179  - encoder API: added ability to set several encoder options / extra fields to
    180    frames using `JxlEncoderSetFrameName`, `JxlEncoderFrameSettingsSetOption`,
    181    `JxlEncoderFrameSettingsSetFloatOption`.
    182  - encoder API: added ability to check required codestream compatibility level
    183    and force specified using `JxlEncoderGetRequiredCodestreamLevel` and
    184    `JxlEncoderSetCodestreamLevel`.
    185  - encoder API: added ability to force emitting box-based container format
    186    using `JxlEncoderUseContainer`.
    187  - encoder API: added ability to store JPEG metadata for lossless reconstruction
    188    using `JxlEncoderStoreJPEGMetadata`
    189  - encoder API: new functions `JxlEncoderSetFrameHeader` and
    190    `JxlEncoderSetExtraChannelBlendInfo` to set animation
    191    and blending parameters of the frame, and `JxlEncoderInitFrameHeader` and
    192    `JxlEncoderInitBlendInfo` to initialize the structs to set.
    193  - encoder API: ability to encode arbitrary extra channels:
    194   `JxlEncoderInitExtraChannelInfo`, `JxlEncoderSetExtraChannelInfo`,
    195   `JxlEncoderSetExtraChannelName` and `JxlEncoderSetExtraChannelBuffer`.
    196  - encoder API: ability to plug custom CMS implementation using
    197    `JxlEncoderSetCms(JxlEncoder* enc, JxlCmsInterface cms)`
    198  - encoder API: added `JxlEncoderGetError` to retrieve last encoder error.
    199 
    200 ### Changed
    201 - decoder API: using `JxlDecoderCloseInput` at the end of all input is required
    202   when using JXL_DEC_BOX, and is now also encouraged in other cases, but not
    203   required in those other cases for backwards compatibility.
    204 - encoder API: `JxlEncoderCloseInput` now closes both frames and boxes input.
    205 - CLI: `cjxl` and `djxl` have been reimplemented on the base of public decoder
    206   and encoder API; dropped dependency on `gflags` for argument parsing.
    207 
    208 ### Deprecated
    209 - decoder API: `JXL_DEC_EXTENSIONS` event: use `JXL_DEC_BASIC_INFO`
    210 - decoder / encoder API: pixel types `JXL_TYPE_BOOLEAN` and `JXL_TYPE_UINT32`:
    211   consider using `JXL_TYPE_UINT8` and `JXL_TYPE_FLOAT` correspondingly.
    212 - decoder API: pixel format parameter for `JxlDecoderGetColorAsEncodedProfile`
    213   and `JxlDecoderGetICCProfileSize`: pass `NULL`.
    214 - decoder API: `JxlDecoderDefaultPixelFormat`
    215 - encoder API: `JxlEncoderOptions`: use `JxlEncoderFrameSettings` instead.
    216 - encoder API: `JxlEncoderOptionsCreate`: use `JxlEncoderFrameSettingsCreate`
    217   instead.
    218 - encoder API: `JxlEncoderOptionsSetDistance`: use `JxlEncoderSetFrameDistance`
    219   instead.
    220 - encoder API: `JxlEncoderOptionsSetLossless`: use `JxlEncoderSetFrameLossless`
    221   instead.
    222 - encoder API: `JxlEncoderOptionsSetEffort`: use
    223   `JxlEncoderFrameSettingsSetOption(frame_settings, JXL_ENC_FRAME_SETTING_EFFORT, effort)`
    224   instead.
    225 - encoder API: `JxlEncoderOptionsSetDecodingSpeed`: use
    226   `JxlEncoderFrameSettingsSetOption(frame_settings, JXL_ENC_FRAME_SETTING_DECODING_SPEED, tier)`
    227   instead.
    228 - encoder API: deprecated `JXL_ENC_NOT_SUPPORTED`, the encoder returns
    229   `JXL_ENC_ERROR` instead and there is no need to handle
    230   `JXL_ENC_NOT_SUPPORTED`.
    231 
    232 ## [0.6.1] - 2021-10-29
    233 ### Changed
    234  - Security: Fix OOB read in splines rendering (#735 -
    235    [CVE-2021-22563](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22563))
    236  - Security: Fix OOB copy (read/write) in out-of-order/multi-threaded decoding
    237    (#708 - [CVE-2021-22564](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22564))
    238  - Fix segfault in `djxl` tool with `--allow_partial_files` flag (#781).
    239  - Fix border in extra channels when using upsampling (#796)
    240 
    241 ## [0.6] - 2021-10-04
    242 ### Added
    243  - API: New functions to decode extra channels:
    244    `JxlDecoderExtraChannelBufferSize` and `JxlDecoderSetExtraChannelBuffer`.
    245  - API: New function `JxlEncoderInitBasicInfo` to initialize `JxlBasicInfo`
    246    (only needed when encoding). NOTE: it is now required to call this function
    247    when using the encoder. Padding was added to the struct for forward
    248    compatibility.
    249  - API: Support for encoding oriented images.
    250  - API: FLOAT16 support in the encoder API.
    251  - Rewrite of the GDK pixbuf loader plugin. Added proper color management and
    252    animation support.
    253  - Rewrite of GIMP plugin. Added compression parameters dialog and switched to
    254    using the public C API.
    255  - Debian packages for GDK pixbuf loader (`libjxl-gdk-pixbuf`) and GIMP
    256    (`libjxl-gimp-plugin`) plugins.
    257  - `cjxl`/`djxl` support for `stdin` and `stdout`.
    258 
    259 ### Changed
    260  - API: Renamed the field `alpha_associated` in `JxlExtraChannelInfo` to
    261    `alpha_premultiplied`, to match the corresponding name in `JxlBasicInfo`.
    262  - Improved the 2x2 downscaling method in the encoder for the optional color
    263    channel resampling for low bit rates.
    264  - Fixed: the combination of floating point original data, XYB color encoding,
    265    and Modular mode was broken (in both encoder and decoder). It now works.
    266    NOTE: this can cause the current encoder to write jxl bitstreams that do
    267    not decode with the old decoder. In particular this will happen when using
    268    cjxl with PFM, EXR, or floating point PSD input, and a combination of XYB
    269    and modular mode is used (which caused an encoder error before), e.g.
    270    using options like `-m -q 80` (lossy modular), `-d 4.5` or `--progressive_dc=1`
    271    (modular DC frame), or default lossy encoding on an image where patches
    272    end up being used. There is no problem when using cjxl with PNG, JPEG, GIF,
    273    APNG, PPM, PGM, PGX, or integer (8-bit or 16-bit) PSD input.
    274  - `libjxl` static library now bundles skcms, fixing static linking in
    275    downstream projects when skcms is used.
    276  - Spline rendering performance improvements.
    277  - Butteraugli changes for less visual masking.
    278 
    279 ## [0.5] - 2021-08-02
    280 ### Added
    281  - API: New function to decode the image using a callback outputting a part of a
    282    row per call.
    283  - API: 16-bit float output support.
    284  - API: `JxlDecoderRewind` and `JxlDecoderSkipFrames` functions to skip more
    285    efficiently to earlier animation frames.
    286  - API: `JxlDecoderSetPreferredColorProfile` function to choose color profile in
    287    certain circumstances.
    288  - encoder: Adding `center_x` and `center_y` flags for more control of the tile
    289    order.
    290  - New encoder speeds `lightning` (1) and `thunder` (2).
    291 
    292 ### Changed
    293  - Re-licensed the project under a BSD 3-Clause license. See the
    294    [LICENSE](LICENSE) and [PATENTS](PATENTS) files for details.
    295  - Full JPEG XL part 1 specification support: Implemented all the spec required
    296    to decode files to pixels, including cases that are not used by the encoder
    297    yet. Part 2 of the spec (container format) is final but not fully implemented
    298    here.
    299  - Butteraugli metric improvements. Exact numbers are different from previous
    300    versions.
    301  - Memory reductions during decoding.
    302  - Reduce the size of the jxl_dec library by removing dependencies.
    303  - A few encoding speedups.
    304  - Clarify the security policy.
    305  - Significant encoding improvements (~5 %) and less ringing.
    306  - Butteraugli metric to have some less masking.
    307  - `cjxl` flag `--speed` is deprecated and replaced by the `--effort` synonym.
    308 
    309 ### Removed
    310 - API for returning a downsampled DC was deprecated
    311   (`JxlDecoderDCOutBufferSize` and `JxlDecoderSetDCOutBuffer`) and will be
    312   removed in the next release.
    313 
    314 ## [0.3.7] - 2021-03-29
    315 ### Changed
    316  - Fix a rounding issue in 8-bit decoding.
    317 
    318 ## [0.3.6] - 2021-03-25
    319 ### Changed
    320  - Fix a bug that could result in the generation of invalid codestreams as
    321    well as failure to decode valid streams.
    322 
    323 ## [0.3.5] - 2021-03-23
    324 ### Added
    325  - New encode-time options for faster decoding at the cost of quality.
    326  - Man pages for cjxl and djxl.
    327 
    328 ### Changed
    329  - Memory usage improvements.
    330  - Faster decoding to 8-bit output with the C API.
    331  - GIMP plugin: avoid the sRGB conversion dialog for sRGB images, do not show
    332    a console window on Windows.
    333  - Various bug fixes.
    334 
    335 ## [0.3.4] - 2021-03-16
    336 ### Changed
    337  - Improved box parsing.
    338  - Improved metadata handling.
    339  - Performance and memory usage improvements.
    340 
    341 ## [0.3.3] - 2021-03-05
    342 ### Changed
    343  - Performance improvements for small images.
    344  - Add a (flag-protected) non-high-precision mode with better speed.
    345  - Significantly speed up the PQ EOTF.
    346  - Allow optional HDR tone mapping in djxl (--tone_map, --display_nits).
    347  - Change the behavior of djxl -j to make it consistent with cjxl (#153).
    348  - Improve image quality.
    349  - Improve EXIF handling.
    350 
    351 ## [0.3.2] - 2021-02-12
    352 ### Changed
    353  - Fix embedded ICC encoding regression
    354    [#149](https://gitlab.com/wg1/jpeg-xl/-/issues/149).
    355 
    356 ## [0.3.1] - 2021-02-10
    357 ### Changed
    358  - New experimental Butteraugli API (`jxl/butteraugli.h`).
    359  - Encoder improvements to low quality settings.
    360  - Bug fixes, including fuzzer-found potential security bug fixes.
    361  - Fixed `-q 100` and `-d 0` not triggering lossless modes.
    362 
    363 ## [0.3] - 2021-01-29
    364 ### Changed
    365  - Minor change to the Decoder C API to accommodate future work for other ways
    366    to provide input.
    367  - Future decoder C API changes will be backwards compatible.
    368  - Lots of bug fixes since the previous version.
    369 
    370 ## [0.2] - 2020-12-24
    371 ### Added
    372  - JPEG XL bitstream format is frozen. Files encoded with 0.2 will be supported
    373    by future versions.
    374 
    375 ### Changed
    376  - Files encoded with previous versions are not supported.
    377 
    378 ## [0.1.1] - 2020-12-01
    379 
    380 ## [0.1] - 2020-11-14
    381 ### Added
    382  - Initial release of an encoder (`cjxl`) and decoder (`djxl`) that work
    383    together as well as a benchmark tool for comparison with other codecs
    384    (`benchmark_xl`).
    385  - Note: JPEG XL format is in the final stages of standardization, minor changes
    386    to the codestream format are still possible but we are not expecting any
    387    changes beyond what is required by bug fixing.
    388  - API: new decoder API in C, check the `examples/` directory for its example
    389    usage. The C API is a work in progress and likely to change both in API and
    390    ABI in future releases.