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.