Commit Graph
96 Commits
Author SHA1 Message Date
Daniel Novomeský bae45287ad heif: check crop values 2026-08-20 19:20:10 +02:00
Daniel Novomeský 458257b7a3 jxl: Do not rewind after reading final frame 2026-08-18 08:48:40 +00:00
Daniel Novomeský c7baa057a6 avif: Do not rewind in jumpToNextImage() 2026-08-10 20:10:46 +02:00
Daniel Novomeský c57af25d36 ossfuzz: call functions used in animations 2026-08-10 17:46:33 +00:00
Daniel Novomeský a11c1feb23 autotests: add AVIF and JXL with animation 2026-08-06 13:08:53 +02:00
Daniel Novomeský 5c3bdcddf2 avif: enable decoding of files with invalid EXIF metadata
When 1st parsing ends with invalid EXIF payload error,
we try 2nd time again while ignoring the EXIF metadata.

Dropped support for legacy 0.x libavif versions,
libavif 1.0.0+ is now required for the AVIF support.
2026-07-27 12:33:25 +00:00
Daniel Novomeský abc2ac2de1 autotests: allow JPG as test source
In special cases, JPG with fuzziness value
can be used instead of big PNG files.
2026-07-27 12:33:25 +00:00
Daniel Novomeský 65b4b14d6f ossfuzz: optimize build, collect all HEIF subformats
Upgrade OpenEXR
2026-07-24 16:02:37 +02:00
Daniel Novomeský a4db968c60 fix HEIC writetest 2026-07-23 10:42:33 +02:00
Daniel Novomeský 27c621901d ossfuzz: enable uncompressed codec in libheif
libheif uses ZLIB and Brotli for the uncompressed codec,
so the libheif will be built after libjxl,
which installs brotli libraries.
2026-07-22 17:21:27 +02:00
Daniel Novomeský 7ec1170c86 heif: declare read support for HIF
image/heif MIME type uses following three file extensions:
heif, heic, hif.

Adding HIF into plugin's list.
2026-07-20 18:23:20 +02:00
Daniel Novomeský a0825fe5cb heif: increase Maximum number of child boxes limit 2026-07-18 12:59:37 +02:00
Daniel Novomeský 2faf524b85 More HEIF-related tests.
New option `KIMAGEFORMATS_HEIC_TEST` for testing images with
HEVC codec only.

Existing option `KIMAGEFORMATS_HEIF_TEST` is used for testing other
possible (mostly quite rare) codecs that might be used by HEIF
images - uncompressed, deflate, zlib, brotli, jpeg.
2026-07-14 08:36:37 +00:00
Daniel Novomeský c748c6c2c6 heif: AVCI saving, JPEG in HEIF read support
Following compromises were chosen to ensure that saved AVCI
is decodable using OpenH264 decoder:
8-bit only, YUV420 subsampling, lossy compression,
large images encoded via image grid.
2026-07-14 08:36:37 +00:00
Daniel Novomeský a5c6239138 ossfuzz: replace INITGUID with __ANSI__
It is more correct way how JXR libraries should be used.
2026-06-21 14:45:09 +02:00
Daniel Novomeský 081975807c JXR: remove INITGUID define
The define caused linking problems on Windows
2026-06-19 16:55:27 +02:00
Daniel Novomeský b58b865ba4 ossfuzz: update libaom and libavif 2026-06-19 16:37:27 +02:00
Daniel Novomeský ea2a4aafab ossfuzz: update aom, libavif, openjpeg 2026-02-19 11:31:12 +01:00
Daniel Novomeský f3de2e77c1 jxl: adjust metadata size limits
Previously there was no limit for uncompressed metadata,
but when compressed metadata required buffer larger than 4MB,
image decoding stopped.

Now the plugin discards/skips metadata boxes larger than 8MB
without stopping image decoding.
If size of compressed box is above 8MB,
we do not attempt to decompress it.
File with compressed metadata could be rejected only in rare cases
when the decompression buffer grows above 32MB (four times 8M).
2026-02-13 15:44:39 +01:00
Daniel Novomeský 8d7fb2c3fd Add JXL testfile which previously triggered crash 2026-01-11 15:25:03 +01:00
Daniel Novomeský 3353809906 jxl: fix crash on lossy gray images
There was a rare crash during decoding of some lossy gray images.
Problem was reported in https://github.com/libjxl/libjxl/issues/4549
This is a workaround which avoids JxlDecoderSetCms call.
2026-01-11 15:03:06 +01:00
Daniel Novomeský abf4d32858 Add gray AVIF files with various transfer functions 2026-01-10 20:41:52 +00:00
Daniel Novomeský 6b1c52c55c avif: Improved color profiles support 2026-01-10 20:41:52 +00:00
Daniel Novomeský 3f1ee9f9d1 Add YCgCo-Re AVIF test
Disable AVIF read tests for libavif below 1.2.0,
where YCgCo-Re decoding is expected to fail.
2025-12-27 21:35:25 +01:00
Daniel Novomeský 8c9a7e88e5 avif: YCgCo-Re decoding fix 2025-12-26 00:47:46 +00:00
Daniel Novomeský dd69fdaea9 lib prefix on Android
Qt's original qtimageformats plug-ins use lib prefix too,
without the lib prefix, the image plug-ins don't work on Android.
2025-04-19 14:16:18 +00:00
Daniel Novomeský 473f5d9847 Write tests for hej2 format 2025-03-16 21:31:46 +01:00
Daniel Novomeský 9bee29cc01 heif: enable saving of hej2 format 2025-03-16 18:37:48 +01:00
Daniel Novomeský 97a1ea181c writetest: special handling for HEIF format 2025-03-12 16:41:39 +01:00
Daniel Novomeský 64a43fb04f readtest: special handling for HEIF format 2025-03-12 16:17:59 +01:00
Daniel Novomeský 6821c29819 heif: disable AVCI decoder for libheif before 1.19.6 2025-03-12 13:26:42 +01:00
Daniel Novomeský e4d95c03fa SKIP tests when libheif configuration is incomplete 2025-03-10 22:01:14 +01:00
Daniel Novomeský afa8ed1a5d heif: enable reading images with native 16 bit depth 2025-03-10 19:42:34 +01:00
Daniel Novomeský 74a734efed jxl: fix build with Qt before 6.8.0 2025-02-15 16:16:10 +01:00
Daniel Novomeský 36a6ef7d78 heif: improve handling of grayscale ICC profiles 2025-02-10 16:59:49 +00:00
Daniel Novomeský 9fd6896cec Improve printing details when writetest fails 2025-02-10 16:59:49 +00:00
Daniel Novomeský 9b14e752db Update HEIF writetest templates 2025-02-10 16:59:49 +00:00
Daniel Novomeský 397957a976 jxl: refactor image saving, native CMYK support 2025-02-07 10:38:46 +00:00
Daniel Novomeský 7a74b50d64 imageconverter: possibility to set image quality 2025-02-04 14:42:44 +01:00
Daniel Novomeský 0a06a07fa4 Print more details when writetest fails 2025-02-04 10:09:12 +00:00
Daniel Novomeský 8a05711e99 jxl: refactor image loading 2025-01-29 17:02:51 +00:00
Daniel Novomeský bda8487147 heif: fix -Wstringop-overread warning 2025-01-08 16:45:57 +01:00
Daniel Novomeský bb10c4bd5c jxl: refactor metadata boxes reading 2025-01-08 12:43:42 +01:00
Daniel Novomeský 43f3fd05f7 avif: color profiles improvements
With Qt 6.8.x, PQ and HLG transfer functions are supported.
Better support for GRAY profiles
2025-01-02 14:11:55 +01:00
Daniel Novomeský a7cf1a87f9 Update heif.json 2024-12-31 17:33:58 +01:00
Daniel Novomeský fe28130cb3 HEIF plug-in extended to read AVCI format
AVCI is H.264 encapsulated in HEIF container
2024-12-29 23:44:18 +01:00
Daniel Novomeský 6558b3255a jxl: Disable color conversion for animations
Workaround for issue https://github.com/libjxl/libjxl/issues/3983
libjxl_cms is used for color conversion of lossy static images.
Fix loading of lossy grayscale images
Fix loading of grayscale images with odd width
2024-11-30 23:18:06 +01:00
Daniel Novomeský 28c4ceeba9 heif: avoid crash in heif_image_handle_has_alpha_channel
Try to load Xiaomi images with non-strict decoding second time.
2024-11-17 15:17:13 +01:00
Daniel NovomeskýandAlbert Astals Cid 638fdfcbdd pcx: fix crash on invalid files
Added new PCX testfile for readtest.
2024-07-22 22:13:14 +00:00
Daniel Novomeský e9da5edb9a avif: check return values
Some libavif calls did not return values in the older versions.
Situation changed meanwhile;
we can check the return values for error conditions now.
2024-07-15 17:46:21 +02:00
Daniel Novomeský da8ed31aec avif: new quality settings
Prior libavif 1.0, quality was set using two numbers
(minQuantizer and maxQuantizer).
New versions of libavif recommend using
new/single quality parameter instead.
Compression using the new settings is different
compared to the old.
For example, new quality 68 gives similar compression
like old default 52.
2023-12-13 17:40:21 +01:00
Daniel Novomeský ce8383e5fd HEIF plug-in extended to support HEJ2 format
HEJ2 is JPEG 2000 codec encapsulated in HEIF container.
Only HEJ2 reading is implemented.
2023-12-07 13:26:43 +01:00
Daniel Novomeský b8b980f400 avif: support repetition count
and minor performance optimizations.
2023-10-06 13:03:28 +02:00
Daniel Novomeský ac808679cd qoi: initialize structure before use
It was reported by Code Quality scans as Critical (CWE-457)
2023-08-29 21:04:00 +02:00
Daniel Novomeský 2aea982e9e qoi: fix reports from quality scanner
struct QoiHeader is initialized to invalid values prior use,
it’s good to detect situations when we read incomplete data.
Add include in scanlineconverter.cpp so it can be used without
change in kf5 branch.
2023-08-29 16:22:52 +02:00
Daniel Novomeský 9c579fc1f8 jxl: add support for libjxl v0.9, drop support for old 0.6.1 2023-06-27 14:32:08 +02:00
Daniel Novomeský b654f20ece heif: reject invalid files with zero size 2023-01-29 16:16:52 +01:00
Daniel Novomeský f4ca3f6783 heif: fix error handling 2022-12-13 11:11:38 +01:00
Daniel Novomeský a30f043e5d heif: rewrite plugin to use only libheif C API
Using C-API instead of C++ libheif API has following advantages:
- More libheif features available (for ex.: strict decoding)
- Linking with static build of libheif is possible
- No need to enable exceptions
2022-12-05 22:43:41 +01:00
Daniel NovomeskýandAlbert Astals Cid 3b1e8f7054 minor tweaks in HEIF and AVIF plugins
It is mostly only about casting between types.
2022-11-19 11:38:49 +00:00
Daniel Novomeský d734f28727 jxl: indicate when all frames have been read
and return correct loop count
2022-10-18 17:58:40 +02:00
Daniel Novomeský afa7399b36 avif: minor fixes
libavif 0.11.0 uses new default dimension limit 32768 pixels,
we allow 65535 which was used by us previously.
Minor tweaks in jumpToNextImage, jumpToImage
to handle rare situations.
2022-10-18 15:05:15 +02:00
Daniel Novomeský bfb12093ad avif: indicate when all frames have been read 2022-10-15 20:08:39 +02:00
Daniel Novomeský bcbf45e23a Add JXL test files corresponding to 8 EXIF orientation values 2022-10-13 15:47:04 +02:00
Daniel Novomeský c71a7984d6 Add AVIF test files with rotation and mirror operations 2022-10-12 15:39:27 +02:00
Daniel Novomeský b1f3a87896 Auto-rotate input images in readtest
Currently, there is no difference in the tests but in the future
we will add images with various transformations defined.
2022-10-12 15:33:08 +02:00
Daniel Novomeský 8af9a0f9d9 jxl: remove C-style casts 2022-10-11 15:38:55 +02:00
Daniel Novomeský 3790a89cd1 avif: Use reinterpret_cast instead C cast
No longer using int for QByteArray size because Qt6 uses qsizetype
2022-10-11 15:05:20 +02:00
Daniel Novomeský f475a4b24a avif: revert 9ac923ad09 commit
Changes to libavif's avifImageRGBToYUV() API were reverted too.
2022-10-11 14:36:17 +02:00
Daniel Novomeský d2f38b8b9c heif: replace C cast with static_cast 2022-10-10 09:28:41 +00:00
Daniel Novomeský 9ab64dbf22 heif: use heif_init/heif_deinit with libheif 1.13.0+
In recent libheif, application should use
heif_init/heif_deinit calls. Unfortunately, these calls are
not thread-safe in released 1.13.0 version yet (will be in the
future) and HEIFHandler is often created in different threads.
So we have to guard their use with a mutex.
2022-10-10 09:28:41 +00:00
Daniel Novomeský 024d199ed0 Replace C cast with reinterpret_cast 2022-09-11 11:01:55 +02:00
Daniel Novomeský 9ac923ad09 avif: adjust for libavif breaking change in YUV<->RGB conversion 2022-09-09 17:54:18 +02:00
Daniel Novomeský 5e59d950bd jxl: support both old 0.6.1 and new 0.7.0 libjxl API
New libjxl API changed the way how lossless 16bit depth images
must be encoded: codestream level 10 must be set,
which implies use of container format.
Unfortunately, there isn’t version number inside libjxl header yet,
so we must detect new version on cmake/PkgConfig level.
2022-06-22 22:21:33 +00:00
Daniel Novomeský cf375a207f avif: read performance improvements 2022-06-20 18:50:03 +02:00
Daniel Novomeský ebcc34519c avif: prepare for breaking change in libavif 2022-05-02 11:46:37 +02:00
Daniel Novomeský 84d56d00cf avif: lossless support 2022-04-06 16:13:10 +00:00
Daniel Novomeský e69dff73e6 avif: encoder speed 7->6 2022-03-10 09:44:50 +01:00
Daniel Novomeský 64cfe52bee avif: fix jumpToImage 2022-03-10 09:39:53 +01:00
Daniel Novomeský 8732fc8487 avif: warn about non-recommended libavif configuration 2022-03-10 09:35:08 +01:00
Daniel Novomeský f04084e175 jxl: encoding improvements
Plug-in can save in 8bit depth now,
previously only 16bit was supported.
Memory and dimension limits were adjusted.
2022-02-16 10:26:56 +01:00
Daniel Novomeský 9911c9c2ea avif: adjust dimension and memory limits
With or height can be above 32k now (up to 64k), but
image should not have more than 256megapixels
(Default memory limit of libavif)
2022-02-11 16:01:07 +01:00
Daniel Novomesky f445e5dd0a avif: limit scope of variables 2021-11-29 17:35:51 +01:00
Daniel Novomesky d3da56bba3 Add JXL to the list of supported formats 2021-11-17 20:06:11 +01:00
Daniel Novomesky 41c4b5930c Add plugin for JPEG XL (JXL) 2021-11-10 16:01:58 +01:00
Daniel Novomesky 6458c9ae52 avif: performance and quality improvements
Enable decoder to use more threads.
8bit YUV->RGB conversion is significantly faster
when AVIF_RGB_FORMAT_RGBA format is used,
because libavif can use libyuv to perform conversion quickly.
Prefer faster AVIF_CHROMA_UPSAMPLING_FASTEST when decoding animation.
Encoder speed changed from to 8 to 7.
Recent AV1 encoders got faster,
so it is OK to switch to better compression quality.
Remove obsolete image/avif-sequence mime-type
as it was merged with image/avif.
2021-09-22 11:53:46 +02:00
Daniel Novomesky ef6be2c077 avif: Disable all strict decoder checks
New libavif 0.9.1 apply some very strict standard compliance
checks by default. Unfortunately, it rejects many files made by
libheif-based apps (GIMP, ImageMagick) in the past.
libheif 1.12.0 (released on May 5, 2021) addressed the problem,
but it would be good to extend grace period, allowing other
projects and distributions to upgrade to fixed version.
2021-06-08 15:20:41 +02:00
Daniel Novomesky bf3f94da76 avif: Adjust for libavif breaking change 2021-06-04 14:37:10 +02:00
Daniel Novomesky dca6e87c89 Enable HEIC plugin to save all ICC profiles 2021-05-14 12:30:28 +02:00
Daniel Novomesky 62f9af9a35 Color profile loading/saving fixes
Allow saving Qt-unsupported variants of ICC profiles, they could be
correctly handled by apps with wider color management support.
Change way how QColorSpace is created to avoid
rare problems in some apps.
2021-05-13 16:56:46 +02:00
Daniel Novomesky 511a22f0b4 Check the input buffer before passing it to libheif 2021-03-02 11:46:13 +00:00
Daniel Novomesky 1462c3abd6 Check primaries returned from libavif
Due to various double vs float arithmetic,
some primaries could be rejected by Qt.
If necessary, we adjust the values so they
will be accepted by Qt.

Remove newline from the ends of error strings.
2021-02-27 19:11:56 +01:00
Daniel Novomesky ca52d4ddf5 Add plugin for High Efficiency Image File Format (HEIF)
Code partially by Sirius Bakke
2021-02-25 11:52:00 +01:00
Daniel Novomesky 8b9125c913 Quality option can be returned without parsing input file. 2021-02-08 10:00:53 +01:00
Daniel Novomesky 8845dd9818 Simplify portion of NCLX color profile code 2021-02-02 09:28:32 +01:00
Daniel NovomeskýandAlbert Astals Cid 34a9ec1b06 Add plugin for AV1 Image File Format (AVIF) 2020-12-13 22:23:27 +00:00