Bug 441648

Summary: preview of next/previous HEIF (iPhone) image is very slow
Product: [Applications] digikam Reporter: rfeg <rfeg.art>
Component: Plugin-DImg-HEIFAssignee: Digikam Developers <digikam-bugs-null>
Status: RESOLVED UPSTREAM    
Severity: normal CC: caulier.gilles, kde, metzpinguin
Priority: NOR Keywords: efficiency, usability
Version: 7.3.0   
Target Milestone: ---   
Platform: macOS (DMG)   
OS: macOS   
Latest Commit: Version Fixed In: 8.1.0
Sentry Crash Report:

Description rfeg 2021-08-28 10:36:48 UTC
SUMMARY

STEPS TO REPRODUCE:
1. import iPhone photos to album
2. double-click on thumb
3. when image is opened hit -> or <- key
4. measure time to show next image

OBSERVED RESULT: takes about to show next picture after hitting -> or <- keys

EXPECTED RESULT: should take less than one second like JPEG and RAW files (it is very fast)

SOFTWARE/OS VERSIONS: macOS with M1 (using Rosetta) 

ADDITIONAL INFORMATION: if you press -> several times the files strip moves several times but big image is still the same until finally shows image selected (that is not visible in the film strip); 
it seems that is not a Mac/M1 related thing, since other images show very fast. 
It occurs also in version 7.2.0.
Note: this is my first bug submission, sorry for any missing info, please be kind
Comment 1 caulier.gilles 2021-08-28 11:19:16 UTC
Actually, the libheif/libde265 are compiled in digiKam core (code is included as well without any optimization at compilation).

https://invent.kde.org/graphics/digikam/-/tree/master/core/libs/heifutils

The plan is to remove this code and to use the system based library, which must include optimizations.

Gilles Caulier
Comment 2 caulier.gilles 2021-08-28 11:21:12 UTC
Anther point is the cache memory used to store pre-loaded images. Under MacOS, a fix have been added to current code to detect properly the amount of MacOS RAW available. This can improve speedup of preview loading.

Gilles Caulier
Comment 3 rfeg 2021-08-28 22:06:16 UTC
thanks for the info, but my comment/bug is the big difference of time needed to process and display the embedded JPEG preview from a HEIF iPhone file vs a RAW file (HEIF is slow, RAW is fast).

@Caullier: do you think that using native library will fix this? will HEIF native library be included in ver 8.0
Comment 4 Maik Qualmann 2021-09-02 05:50:52 UTC
A current log from the digiKam start of the last MacOS package would be nice.

Maik
Comment 5 caulier.gilles 2021-11-18 13:09:16 UTC
Git commit 4ee4669ce59fd6ed174e9e00f2bff7ee007d008d by Gilles Caulier.
Committed on 18/11/2021 at 13:06.
Pushed by cgilles into branch 'master'.

Add find libheif cmake script to use native version of library, included dependencies

A  +73   -0    core/cmake/modules/FindHEIF.cmake
M  +1    -1    core/cmake/modules/FindLensFun.cmake
M  +1    -1    core/cmake/modules/FindX265.cmake

https://invent.kde.org/graphics/digikam/commit/4ee4669ce59fd6ed174e9e00f2bff7ee007d008d
Comment 6 caulier.gilles 2022-03-03 10:38:14 UTC
Git commit f6ec12dfb701d1d77be979dee7c72537551af86d by Gilles Caulier.
Committed on 03/03/2022 at 10:34.
Pushed by cgilles into branch 'qt5-maintenance'.

Remove internal libheif and libde265 from digiKam core in favor of system libraries
to inherits of last decoding optimizations and native accelerations.
Show libheif version in Components Info dialog.
Tested with AppImage bundle compilation workflow.
TODO check Linux native, MacOS, and Windows targets.

M  +1    -0    NEWS
M  +1    -1    bootstrap.linux
M  +3    -5    core/CMakeLists.txt
M  +3    -2    core/app/DigikamCoreTarget.cmake
M  +6    -5    core/cmake/modules/FindHEIF.cmake
M  +1    -0    core/dplugins/dimg/heif/CMakeLists.txt
M  +4    -1    core/dplugins/dimg/heif/dimgheifloader.h
M  +0    -1    core/libs/CMakeLists.txt
M  +4    -0    core/libs/dialogs/libsinfodlg.cpp
D  +0    -230  core/libs/heifutils/CMakeLists.txt
D  +0    -3    core/libs/heifutils/README
D  +0    -4    core/libs/heifutils/libde265/README
D  +0    -359  core/libs/heifutils/libde265/acceleration.h
D  +0    -99   core/libs/heifutils/libde265/alloc_pool.cc
D  +0    -61   core/libs/heifutils/libde265/alloc_pool.h
D  +0    -176  core/libs/heifutils/libde265/bitstream.cc
D  +0    -63   core/libs/heifutils/libde265/bitstream.h
D  +0    -1033 core/libs/heifutils/libde265/cabac.cc
D  +0    -211  core/libs/heifutils/libde265/cabac.h
D  +0    -491  core/libs/heifutils/libde265/configparam.cc
D  +0    -401  core/libs/heifutils/libde265/configparam.h
D  +0    -347  core/libs/heifutils/libde265/contextmodel.cc
D  +0    -130  core/libs/heifutils/libde265/contextmodel.h
D  +0    -36   core/libs/heifutils/libde265/de265-version.h.in
D  +0    -711  core/libs/heifutils/libde265/de265.cc
D  +0    -437  core/libs/heifutils/libde265/de265.h
D  +0    -1058 core/libs/heifutils/libde265/deblock.cc
D  +0    -29   core/libs/heifutils/libde265/deblock.h
D  +0    -2285 core/libs/heifutils/libde265/decctx.cc
D  +0    -528  core/libs/heifutils/libde265/decctx.h
D  +0    -296  core/libs/heifutils/libde265/dpb.cc
D  +0    -118  core/libs/heifutils/libde265/dpb.h
D  +0    -321  core/libs/heifutils/libde265/en265.cc
D  +0    -218  core/libs/heifutils/libde265/en265.h
D  +0    -95   core/libs/heifutils/libde265/encoder/algo/algo.cc
D  +0    -95   core/libs/heifutils/libde265/encoder/algo/algo.h
D  +0    -113  core/libs/heifutils/libde265/encoder/algo/cb-interpartmode.cc
D  +0    -108  core/libs/heifutils/libde265/encoder/algo/cb-interpartmode.h
D  +0    -132  core/libs/heifutils/libde265/encoder/algo/cb-intra-inter.cc
D  +0    -68   core/libs/heifutils/libde265/encoder/algo/cb-intra-inter.h
D  +0    -185  core/libs/heifutils/libde265/encoder/algo/cb-intrapartmode.cc
D  +0    -149  core/libs/heifutils/libde265/encoder/algo/cb-intrapartmode.h
D  +0    -176  core/libs/heifutils/libde265/encoder/algo/cb-mergeindex.cc
D  +0    -70   core/libs/heifutils/libde265/encoder/algo/cb-mergeindex.h
D  +0    -114  core/libs/heifutils/libde265/encoder/algo/cb-skip.cc
D  +0    -72   core/libs/heifutils/libde265/encoder/algo/cb-skip.h
D  +0    -178  core/libs/heifutils/libde265/encoder/algo/cb-split.cc
D  +0    -88   core/libs/heifutils/libde265/encoder/algo/cb-split.h
D  +0    -202  core/libs/heifutils/libde265/encoder/algo/coding-options.cc
D  +0    -151  core/libs/heifutils/libde265/encoder/algo/coding-options.h
D  +0    -61   core/libs/heifutils/libde265/encoder/algo/ctb-qscale.cc
D  +0    -109  core/libs/heifutils/libde265/encoder/algo/ctb-qscale.h
D  +0    -318  core/libs/heifutils/libde265/encoder/algo/pb-mv.cc
D  +0    -177  core/libs/heifutils/libde265/encoder/algo/pb-mv.h
D  +0    -532  core/libs/heifutils/libde265/encoder/algo/tb-intrapredmode.cc
D  +0    -297  core/libs/heifutils/libde265/encoder/algo/tb-intrapredmode.h
D  +0    -46   core/libs/heifutils/libde265/encoder/algo/tb-rateestim.cc
D  +0    -101  core/libs/heifutils/libde265/encoder/algo/tb-rateestim.h
D  +0    -378  core/libs/heifutils/libde265/encoder/algo/tb-split.cc
D  +0    -126  core/libs/heifutils/libde265/encoder/algo/tb-split.h
D  +0    -254  core/libs/heifutils/libde265/encoder/algo/tb-transform.cc
D  +0    -86   core/libs/heifutils/libde265/encoder/algo/tb-transform.h
D  +0    -313  core/libs/heifutils/libde265/encoder/encoder-context.cc
D  +0    -173  core/libs/heifutils/libde265/encoder/encoder-context.h
D  +0    -428  core/libs/heifutils/libde265/encoder/encoder-core.cc
D  +0    -151  core/libs/heifutils/libde265/encoder/encoder-core.h
D  +0    -340  core/libs/heifutils/libde265/encoder/encoder-intrapred.cc
D  +0    -40   core/libs/heifutils/libde265/encoder/encoder-intrapred.h
D  +0    -80   core/libs/heifutils/libde265/encoder/encoder-motion.cc
D  +0    -32   core/libs/heifutils/libde265/encoder/encoder-motion.h
D  +0    -83   core/libs/heifutils/libde265/encoder/encoder-params.cc
D  +0    -143  core/libs/heifutils/libde265/encoder/encoder-params.h
D  +0    -1730 core/libs/heifutils/libde265/encoder/encoder-syntax.cc
D  +0    -102  core/libs/heifutils/libde265/encoder/encoder-syntax.h
D  +0    -766  core/libs/heifutils/libde265/encoder/encoder-types.cc
D  +0    -409  core/libs/heifutils/libde265/encoder/encoder-types.h
D  +0    -321  core/libs/heifutils/libde265/encoder/encpicbuf.cc
D  +0    -144  core/libs/heifutils/libde265/encoder/encpicbuf.h
D  +0    -106  core/libs/heifutils/libde265/encoder/sop.cc
D  +0    -147  core/libs/heifutils/libde265/encoder/sop.h
D  +0    -136  core/libs/heifutils/libde265/extra/win32cond.cc
D  +0    -65   core/libs/heifutils/libde265/extra/win32cond.h
D  +0    -1210 core/libs/heifutils/libde265/fallback-dct.cc
D  +0    -96   core/libs/heifutils/libde265/fallback-dct.h
D  +0    -648  core/libs/heifutils/libde265/fallback-motion.cc
D  +0    -104  core/libs/heifutils/libde265/fallback-motion.h
D  +0    -127  core/libs/heifutils/libde265/fallback.cc
D  +0    -28   core/libs/heifutils/libde265/fallback.h
D  +0    -220  core/libs/heifutils/libde265/image-io.cc
D  +0    -121  core/libs/heifutils/libde265/image-io.h
D  +0    -815  core/libs/heifutils/libde265/image.cc
D  +0    -864  core/libs/heifutils/libde265/image.h
D  +0    -364  core/libs/heifutils/libde265/intrapred.cc
D  +0    -678  core/libs/heifutils/libde265/intrapred.h
D  +0    -295  core/libs/heifutils/libde265/md5.cc
D  +0    -45   core/libs/heifutils/libde265/md5.h
D  +0    -2111 core/libs/heifutils/libde265/motion.cc
D  +0    -131  core/libs/heifutils/libde265/motion.h
D  +0    -446  core/libs/heifutils/libde265/nal-parser.cc
D  +0    -154  core/libs/heifutils/libde265/nal-parser.h
D  +0    -166  core/libs/heifutils/libde265/nal.cc
D  +0    -129  core/libs/heifutils/libde265/nal.h
D  +0    -992  core/libs/heifutils/libde265/pps.cc
D  +0    -163  core/libs/heifutils/libde265/pps.h
D  +0    -111  core/libs/heifutils/libde265/quality.cc
D  +0    -47   core/libs/heifutils/libde265/quality.h
D  +0    -434  core/libs/heifutils/libde265/refpic.cc
D  +0    -61   core/libs/heifutils/libde265/refpic.h
D  +0    -524  core/libs/heifutils/libde265/sao.cc
D  +0    -36   core/libs/heifutils/libde265/sao.h
D  +0    -152  core/libs/heifutils/libde265/scan.cc
D  +0    -43   core/libs/heifutils/libde265/scan.h
D  +0    -501  core/libs/heifutils/libde265/sei.cc
D  +0    -89   core/libs/heifutils/libde265/sei.h
D  +0    -5072 core/libs/heifutils/libde265/slice.cc
D  +0    -313  core/libs/heifutils/libde265/slice.h
D  +0    -1298 core/libs/heifutils/libde265/sps.cc
D  +0    -257  core/libs/heifutils/libde265/sps.h
D  +0    -312  core/libs/heifutils/libde265/threads.cc
D  +0    -148  core/libs/heifutils/libde265/threads.h
D  +0    -739  core/libs/heifutils/libde265/transform.cc
D  +0    -65   core/libs/heifutils/libde265/transform.h
D  +0    -247  core/libs/heifutils/libde265/util.cc
D  +0    -229  core/libs/heifutils/libde265/util.h
D  +0    -562  core/libs/heifutils/libde265/visualize.cc
D  +0    -50   core/libs/heifutils/libde265/visualize.h
D  +0    -602  core/libs/heifutils/libde265/vps.cc
D  +0    -173  core/libs/heifutils/libde265/vps.h
D  +0    -425  core/libs/heifutils/libde265/vui.cc
D  +0    -126  core/libs/heifutils/libde265/vui.h
D  +0    -5    core/libs/heifutils/libheif/README
D  +0    -615  core/libs/heifutils/libheif/bitstream.cc
D  +0    -285  core/libs/heifutils/libheif/bitstream.h
D  +0    -2887 core/libs/heifutils/libheif/box.cc
D  +0    -858  core/libs/heifutils/libheif/box.h
D  +0    -170  core/libs/heifutils/libheif/error.cc
D  +0    -109  core/libs/heifutils/libheif/error.h
D  +0    -1883 core/libs/heifutils/libheif/heif.cc
D  +0    -1234 core/libs/heifutils/libheif/heif.h
D  +0    -66   core/libs/heifutils/libheif/heif_api_structs.h
D  +0    -2453 core/libs/heifutils/libheif/heif_colorconversion.cc
D  +0    -129  core/libs/heifutils/libheif/heif_colorconversion.h
D  +0    -1975 core/libs/heifutils/libheif/heif_context.cc
D  +0    -296  core/libs/heifutils/libheif/heif_context.h
D  +0    -1029 core/libs/heifutils/libheif/heif_cxx.h
D  +0    -355  core/libs/heifutils/libheif/heif_decoder_libde265.cc
D  +0    -26   core/libs/heifutils/libheif/heif_decoder_libde265.h
D  +0    -854  core/libs/heifutils/libheif/heif_encoder_x265.cc
D  +0    -40   core/libs/heifutils/libheif/heif_encoder_x265.h
D  +0    -657  core/libs/heifutils/libheif/heif_file.cc
D  +0    -165  core/libs/heifutils/libheif/heif_file.h
D  +0    -302  core/libs/heifutils/libheif/heif_hevc.cc
D  +0    -61   core/libs/heifutils/libheif/heif_hevc.h
D  +0    -812  core/libs/heifutils/libheif/heif_image.cc
D  +0    -130  core/libs/heifutils/libheif/heif_image.h
D  +0    -49   core/libs/heifutils/libheif/heif_limits.h
D  +0    -32   core/libs/heifutils/libheif/heif_plugin.cc
D  +0    -254  core/libs/heifutils/libheif/heif_plugin.h
D  +0    -148  core/libs/heifutils/libheif/heif_plugin_registry.cc
D  +0    -62   core/libs/heifutils/libheif/heif_plugin_registry.h
D  +0    -36   core/libs/heifutils/libheif/heif_version.h.in
D  +0    -63   core/libs/heifutils/libheif/logging.h
M  +0    -2    core/libs/metadataengine/CMakeLists.txt
M  +4    -1    core/libs/metadataengine/dmetadata/dmetadata_libheif.cpp
M  +42   -86   project/bundles/3rdparty/ext_heif/CMakeLists.txt
M  +17   -8    project/bundles/3rdparty/ext_heif/de265-lib-linux.patch
M  +13   -41   project/bundles/3rdparty/ext_heif/de265-lib-mxe.patch
D  +0    -13   project/bundles/3rdparty/ext_heif/heif-lib-macports.patch
M  +32   -16   project/bundles/3rdparty/ext_heif/heif-lib-mxe.patch
D  +0    -13   project/bundles/3rdparty/ext_heif/libde265.pc.in_cmake
D  +0    -15   project/bundles/3rdparty/ext_heif/libheif.pc.in_cmake

https://invent.kde.org/graphics/digikam/commit/f6ec12dfb701d1d77be979dee7c72537551af86d
Comment 7 caulier.gilles 2022-03-03 10:42:29 UTC
Git commit a0ea1ad2e105107b040781910c589473bca753db by Gilles Caulier.
Committed on 03/03/2022 at 10:41.
Pushed by cgilles into branch 'qt5-maintenance'.

add libheif build for AppImage

M  +1    -0    project/bundles/appimage/01-build-host.sh

https://invent.kde.org/graphics/digikam/commit/a0ea1ad2e105107b040781910c589473bca753db
Comment 8 caulier.gilles 2022-03-03 11:21:49 UTC
Git commit 60223e3ec1eddb7120168d9c6e7eaf1e40c39dfd by Gilles Caulier.
Committed on 03/03/2022 at 11:20.
Pushed by cgilles into branch 'qt5-maintenance'.

Add libheif dependency list

M  +1    -0    Mainpage.dox

https://invent.kde.org/graphics/digikam/commit/60223e3ec1eddb7120168d9c6e7eaf1e40c39dfd
Comment 9 caulier.gilles 2022-03-03 12:36:39 UTC
Git commit 9d66c7989d870239914c7175a7a0e92101ce39cb by Gilles Caulier.
Committed on 03/03/2022 at 12:35.
Pushed by cgilles into branch 'qt5-maintenance'.

Add libheif compilation rules for Windows target using MXE.

M  +3    -15   project/bundles/3rdparty/ext_heif/CMakeLists.txt
M  +1    -0    project/bundles/mxe/01-build-mxe.sh

https://invent.kde.org/graphics/digikam/commit/9d66c7989d870239914c7175a7a0e92101ce39cb
Comment 10 caulier.gilles 2022-03-03 13:05:29 UTC
Git commit fd16088d948c2ef4324f0abbe1498068fba2c2f4 by Gilles Caulier.
Committed on 03/03/2022 at 13:04.
Pushed by cgilles into branch 'qt5-maintenance'.

Add libheif dependency to macports

M  +1    -0    project/bundles/macports/01-build-macports.sh

https://invent.kde.org/graphics/digikam/commit/fd16088d948c2ef4324f0abbe1498068fba2c2f4
Comment 11 caulier.gilles 2022-03-03 13:17:17 UTC
Hi Maik,

I mostly completed to drop of libheif/libde265 from digiKam core in qt5-maintenance branch. I will backport all commits to master of course.

Looking into libgd heif loader, i discovered this definition :

https://github.com/libgd/libgd/blob/master/src/gd_heif.c#L23

... used to allocate the heif context. 

https://github.com/libgd/libgd/blob/master/src/gd_heif.c#L125

The question is why to use this value ? It's an optimization ?

Gilles
Comment 12 Maik Qualmann 2022-03-03 14:14:22 UTC
Yes, that's an optimization if you don't know how much memory is required. It's faster to request larger blocks than to constantly expand with small blocks. Something similar for QVector with QVector::reserve().

https://doc.qt.io/qt-5/qvector.html#reserve

Maik
Comment 13 caulier.gilles 2022-03-03 14:15:36 UTC
MAik,

Do you think we needs something like that in HEIF image loader ?

Gilles
Comment 14 caulier.gilles 2022-03-03 14:16:02 UTC
Git commit 3164bc36d6ad04f5bbdd4b375bc904d1cb697a6d by Gilles Caulier.
Committed on 03/03/2022 at 14:12.
Pushed by cgilles into branch 'master'.

backport commit to drop libheif/libde265 from digiKam core in favor of system libraries

M  +1    -0    Mainpage.dox
M  +3    -3    core/CMakeLists.txt
M  +1    -0    core/app/DigikamCoreTarget.cmake
M  +6    -5    core/cmake/modules/FindHEIF.cmake
M  +1    -0    core/dplugins/dimg/heif/CMakeLists.txt
M  +4    -1    core/dplugins/dimg/heif/dimgheifloader.h
M  +4    -0    core/libs/dialogs/libsinfodlg.cpp
D  +0    -228  core/libs/heifutils/CMakeLists.txt
D  +0    -3    core/libs/heifutils/README
D  +0    -4    core/libs/heifutils/libde265/README
D  +0    -359  core/libs/heifutils/libde265/acceleration.h
D  +0    -99   core/libs/heifutils/libde265/alloc_pool.cc
D  +0    -61   core/libs/heifutils/libde265/alloc_pool.h
D  +0    -176  core/libs/heifutils/libde265/bitstream.cc
D  +0    -63   core/libs/heifutils/libde265/bitstream.h
D  +0    -1033 core/libs/heifutils/libde265/cabac.cc
D  +0    -211  core/libs/heifutils/libde265/cabac.h
D  +0    -491  core/libs/heifutils/libde265/configparam.cc
D  +0    -401  core/libs/heifutils/libde265/configparam.h
D  +0    -347  core/libs/heifutils/libde265/contextmodel.cc
D  +0    -130  core/libs/heifutils/libde265/contextmodel.h
D  +0    -36   core/libs/heifutils/libde265/de265-version.h.in
D  +0    -711  core/libs/heifutils/libde265/de265.cc
D  +0    -437  core/libs/heifutils/libde265/de265.h
D  +0    -1058 core/libs/heifutils/libde265/deblock.cc
D  +0    -29   core/libs/heifutils/libde265/deblock.h
D  +0    -2285 core/libs/heifutils/libde265/decctx.cc
D  +0    -528  core/libs/heifutils/libde265/decctx.h
D  +0    -296  core/libs/heifutils/libde265/dpb.cc
D  +0    -118  core/libs/heifutils/libde265/dpb.h
D  +0    -321  core/libs/heifutils/libde265/en265.cc
D  +0    -218  core/libs/heifutils/libde265/en265.h
D  +0    -95   core/libs/heifutils/libde265/encoder/algo/algo.cc
D  +0    -95   core/libs/heifutils/libde265/encoder/algo/algo.h
D  +0    -113  core/libs/heifutils/libde265/encoder/algo/cb-interpartmode.cc
D  +0    -108  core/libs/heifutils/libde265/encoder/algo/cb-interpartmode.h
D  +0    -132  core/libs/heifutils/libde265/encoder/algo/cb-intra-inter.cc
D  +0    -68   core/libs/heifutils/libde265/encoder/algo/cb-intra-inter.h
D  +0    -185  core/libs/heifutils/libde265/encoder/algo/cb-intrapartmode.cc
D  +0    -149  core/libs/heifutils/libde265/encoder/algo/cb-intrapartmode.h
D  +0    -176  core/libs/heifutils/libde265/encoder/algo/cb-mergeindex.cc
D  +0    -70   core/libs/heifutils/libde265/encoder/algo/cb-mergeindex.h
D  +0    -114  core/libs/heifutils/libde265/encoder/algo/cb-skip.cc
D  +0    -72   core/libs/heifutils/libde265/encoder/algo/cb-skip.h
D  +0    -178  core/libs/heifutils/libde265/encoder/algo/cb-split.cc
D  +0    -88   core/libs/heifutils/libde265/encoder/algo/cb-split.h
D  +0    -202  core/libs/heifutils/libde265/encoder/algo/coding-options.cc
D  +0    -151  core/libs/heifutils/libde265/encoder/algo/coding-options.h
D  +0    -61   core/libs/heifutils/libde265/encoder/algo/ctb-qscale.cc
D  +0    -109  core/libs/heifutils/libde265/encoder/algo/ctb-qscale.h
D  +0    -318  core/libs/heifutils/libde265/encoder/algo/pb-mv.cc
D  +0    -177  core/libs/heifutils/libde265/encoder/algo/pb-mv.h
D  +0    -532  core/libs/heifutils/libde265/encoder/algo/tb-intrapredmode.cc
D  +0    -297  core/libs/heifutils/libde265/encoder/algo/tb-intrapredmode.h
D  +0    -46   core/libs/heifutils/libde265/encoder/algo/tb-rateestim.cc
D  +0    -101  core/libs/heifutils/libde265/encoder/algo/tb-rateestim.h
D  +0    -378  core/libs/heifutils/libde265/encoder/algo/tb-split.cc
D  +0    -126  core/libs/heifutils/libde265/encoder/algo/tb-split.h
D  +0    -254  core/libs/heifutils/libde265/encoder/algo/tb-transform.cc
D  +0    -86   core/libs/heifutils/libde265/encoder/algo/tb-transform.h
D  +0    -313  core/libs/heifutils/libde265/encoder/encoder-context.cc
D  +0    -173  core/libs/heifutils/libde265/encoder/encoder-context.h
D  +0    -428  core/libs/heifutils/libde265/encoder/encoder-core.cc
D  +0    -151  core/libs/heifutils/libde265/encoder/encoder-core.h
D  +0    -340  core/libs/heifutils/libde265/encoder/encoder-intrapred.cc
D  +0    -40   core/libs/heifutils/libde265/encoder/encoder-intrapred.h
D  +0    -80   core/libs/heifutils/libde265/encoder/encoder-motion.cc
D  +0    -32   core/libs/heifutils/libde265/encoder/encoder-motion.h
D  +0    -83   core/libs/heifutils/libde265/encoder/encoder-params.cc
D  +0    -143  core/libs/heifutils/libde265/encoder/encoder-params.h
D  +0    -1730 core/libs/heifutils/libde265/encoder/encoder-syntax.cc
D  +0    -102  core/libs/heifutils/libde265/encoder/encoder-syntax.h
D  +0    -766  core/libs/heifutils/libde265/encoder/encoder-types.cc
D  +0    -409  core/libs/heifutils/libde265/encoder/encoder-types.h
D  +0    -321  core/libs/heifutils/libde265/encoder/encpicbuf.cc
D  +0    -144  core/libs/heifutils/libde265/encoder/encpicbuf.h
D  +0    -106  core/libs/heifutils/libde265/encoder/sop.cc
D  +0    -147  core/libs/heifutils/libde265/encoder/sop.h
D  +0    -136  core/libs/heifutils/libde265/extra/win32cond.cc
D  +0    -65   core/libs/heifutils/libde265/extra/win32cond.h
D  +0    -1210 core/libs/heifutils/libde265/fallback-dct.cc
D  +0    -96   core/libs/heifutils/libde265/fallback-dct.h
D  +0    -648  core/libs/heifutils/libde265/fallback-motion.cc
D  +0    -104  core/libs/heifutils/libde265/fallback-motion.h
D  +0    -127  core/libs/heifutils/libde265/fallback.cc
D  +0    -28   core/libs/heifutils/libde265/fallback.h
D  +0    -220  core/libs/heifutils/libde265/image-io.cc
D  +0    -121  core/libs/heifutils/libde265/image-io.h
D  +0    -815  core/libs/heifutils/libde265/image.cc
D  +0    -864  core/libs/heifutils/libde265/image.h
D  +0    -364  core/libs/heifutils/libde265/intrapred.cc
D  +0    -678  core/libs/heifutils/libde265/intrapred.h
D  +0    -295  core/libs/heifutils/libde265/md5.cc
D  +0    -45   core/libs/heifutils/libde265/md5.h
D  +0    -2111 core/libs/heifutils/libde265/motion.cc
D  +0    -131  core/libs/heifutils/libde265/motion.h
D  +0    -446  core/libs/heifutils/libde265/nal-parser.cc
D  +0    -154  core/libs/heifutils/libde265/nal-parser.h
D  +0    -166  core/libs/heifutils/libde265/nal.cc
D  +0    -129  core/libs/heifutils/libde265/nal.h
D  +0    -992  core/libs/heifutils/libde265/pps.cc
D  +0    -163  core/libs/heifutils/libde265/pps.h
D  +0    -111  core/libs/heifutils/libde265/quality.cc
D  +0    -47   core/libs/heifutils/libde265/quality.h
D  +0    -434  core/libs/heifutils/libde265/refpic.cc
D  +0    -61   core/libs/heifutils/libde265/refpic.h
D  +0    -524  core/libs/heifutils/libde265/sao.cc
D  +0    -36   core/libs/heifutils/libde265/sao.h
D  +0    -152  core/libs/heifutils/libde265/scan.cc
D  +0    -43   core/libs/heifutils/libde265/scan.h
D  +0    -501  core/libs/heifutils/libde265/sei.cc
D  +0    -89   core/libs/heifutils/libde265/sei.h
D  +0    -5072 core/libs/heifutils/libde265/slice.cc
D  +0    -313  core/libs/heifutils/libde265/slice.h
D  +0    -1298 core/libs/heifutils/libde265/sps.cc
D  +0    -257  core/libs/heifutils/libde265/sps.h
D  +0    -312  core/libs/heifutils/libde265/threads.cc
D  +0    -148  core/libs/heifutils/libde265/threads.h
D  +0    -739  core/libs/heifutils/libde265/transform.cc
D  +0    -65   core/libs/heifutils/libde265/transform.h
D  +0    -247  core/libs/heifutils/libde265/util.cc
D  +0    -229  core/libs/heifutils/libde265/util.h
D  +0    -562  core/libs/heifutils/libde265/visualize.cc
D  +0    -50   core/libs/heifutils/libde265/visualize.h
D  +0    -602  core/libs/heifutils/libde265/vps.cc
D  +0    -173  core/libs/heifutils/libde265/vps.h
D  +0    -425  core/libs/heifutils/libde265/vui.cc
D  +0    -126  core/libs/heifutils/libde265/vui.h
D  +0    -5    core/libs/heifutils/libheif/README
D  +0    -615  core/libs/heifutils/libheif/bitstream.cc
D  +0    -285  core/libs/heifutils/libheif/bitstream.h
D  +0    -2887 core/libs/heifutils/libheif/box.cc
D  +0    -858  core/libs/heifutils/libheif/box.h
D  +0    -170  core/libs/heifutils/libheif/error.cc
D  +0    -109  core/libs/heifutils/libheif/error.h
D  +0    -1883 core/libs/heifutils/libheif/heif.cc
D  +0    -1239 core/libs/heifutils/libheif/heif.h
D  +0    -66   core/libs/heifutils/libheif/heif_api_structs.h
D  +0    -2453 core/libs/heifutils/libheif/heif_colorconversion.cc
D  +0    -129  core/libs/heifutils/libheif/heif_colorconversion.h
D  +0    -1975 core/libs/heifutils/libheif/heif_context.cc
D  +0    -296  core/libs/heifutils/libheif/heif_context.h
D  +0    -1029 core/libs/heifutils/libheif/heif_cxx.h
D  +0    -355  core/libs/heifutils/libheif/heif_decoder_libde265.cc
D  +0    -26   core/libs/heifutils/libheif/heif_decoder_libde265.h
D  +0    -854  core/libs/heifutils/libheif/heif_encoder_x265.cc
D  +0    -40   core/libs/heifutils/libheif/heif_encoder_x265.h
D  +0    -657  core/libs/heifutils/libheif/heif_file.cc
D  +0    -165  core/libs/heifutils/libheif/heif_file.h
D  +0    -302  core/libs/heifutils/libheif/heif_hevc.cc
D  +0    -61   core/libs/heifutils/libheif/heif_hevc.h
D  +0    -812  core/libs/heifutils/libheif/heif_image.cc
D  +0    -130  core/libs/heifutils/libheif/heif_image.h
D  +0    -49   core/libs/heifutils/libheif/heif_limits.h
D  +0    -32   core/libs/heifutils/libheif/heif_plugin.cc
D  +0    -254  core/libs/heifutils/libheif/heif_plugin.h
D  +0    -148  core/libs/heifutils/libheif/heif_plugin_registry.cc
D  +0    -62   core/libs/heifutils/libheif/heif_plugin_registry.h
D  +0    -36   core/libs/heifutils/libheif/heif_version.h.in
D  +0    -63   core/libs/heifutils/libheif/logging.h
M  +0    -2    core/libs/metadataengine/CMakeLists.txt
M  +4    -1    core/libs/metadataengine/dmetadata/dmetadata_libheif.cpp
M  +30   -86   project/bundles/3rdparty/ext_heif/CMakeLists.txt
M  +17   -8    project/bundles/3rdparty/ext_heif/de265-lib-linux.patch
M  +13   -41   project/bundles/3rdparty/ext_heif/de265-lib-mxe.patch
A  +38   -0    project/bundles/3rdparty/ext_heif/heif-lib-linux.patch
D  +0    -13   project/bundles/3rdparty/ext_heif/heif-lib-macports.patch
M  +32   -16   project/bundles/3rdparty/ext_heif/heif-lib-mxe.patch
D  +0    -13   project/bundles/3rdparty/ext_heif/libde265.pc.in_cmake
D  +0    -15   project/bundles/3rdparty/ext_heif/libheif.pc.in_cmake
M  +1    -0    project/bundles/appimage/01-build-host.sh
M  +1    -0    project/bundles/macports/01-build-macports.sh
M  +1    -0    project/bundles/mxe/01-build-mxe.sh

https://invent.kde.org/graphics/digikam/commit/3164bc36d6ad04f5bbdd4b375bc904d1cb697a6d
Comment 15 caulier.gilles 2022-03-03 14:21:12 UTC
Git commit 836756ca71a980eacedd3ec2838b1222e6361fa7 by Gilles Caulier.
Committed on 03/03/2022 at 14:19.
Pushed by cgilles into branch 'qt5-maintenance'.

FlatPak build configuration for KDE server: add libde265 and libheif dependencies for 7.7.0 release and later

M  +14   -0    project/bundles/flatpak/org.kde.digikam.json

https://invent.kde.org/graphics/digikam/commit/836756ca71a980eacedd3ec2838b1222e6361fa7
Comment 16 caulier.gilles 2022-03-03 14:22:29 UTC
Git commit d164c064967aaaaf50f1c02f6b5ec8d449a86df2 by Gilles Caulier.
Committed on 03/03/2022 at 14:20.
Pushed by cgilles into branch 'master'.

FlatPak build configuration for KDE server: add libde265 and libheif dependencies for 7.7.0 release and later

M  +14   -0    project/bundles/flatpak/org.kde.digikam.json

https://invent.kde.org/graphics/digikam/commit/d164c064967aaaaf50f1c02f6b5ec8d449a86df2
Comment 17 Maik Qualmann 2022-03-03 14:22:43 UTC
I don't think we need it. We know the final size of the memory needed for the DImg and allocate it completely with width x height x 4(8).

Maik
Comment 18 caulier.gilles 2022-03-03 14:28:41 UTC
Issue for FlatPak continuous deployment from FlatHub : 

https://github.com/flathub/org.kde.digikam/issues/32

Gilles Caulier
Comment 19 caulier.gilles 2022-03-03 14:41:53 UTC
Issue for Snap continuous deployment from SnapCraft.io :

https://invent.kde.org/packaging/snapcraft-kde-applications/-/issues/1

Gilles Caulier
Comment 20 caulier.gilles 2022-03-03 15:23:33 UTC
Issue for Craft build system :

https://invent.kde.org/packaging/craft-blueprints-kde/-/issues/5

Gilles Caulier
Comment 21 caulier.gilles 2022-03-03 18:04:21 UTC
Git commit c84ddfce02f08c89ba63fa6d224ee0de855f8091 by Gilles Caulier.
Committed on 03/03/2022 at 18:00.
Pushed by cgilles into branch 'master'.

Make libheif dependency optional

M  +2    -2    Mainpage.dox
M  +2    -2    core/CMakeLists.txt
M  +10   -1    core/app/DigikamCoreTarget.cmake
M  +3    -0    core/app/utils/digikam_config.h.cmake.in
M  +4    -1    core/dplugins/dimg/CMakeLists.txt
M  +10   -2    core/libs/dialogs/libsinfodlg.cpp
M  +9    -1    core/libs/metadataengine/CMakeLists.txt
M  +6    -1    core/libs/metadataengine/dmetadata/dmetadata.h
M  +8    -1    core/libs/metadataengine/dmetadata/dmetadata_fileio.cpp

https://invent.kde.org/graphics/digikam/commit/c84ddfce02f08c89ba63fa6d224ee0de855f8091
Comment 22 caulier.gilles 2022-03-03 18:22:11 UTC
Git commit 3e95ab4926b1faf34a3c0ca630cc3fe809c926eb by Gilles Caulier.
Committed on 03/03/2022 at 18:18.
Pushed by cgilles into branch 'master'.

Only check for libx265 if libheif is found

M  +11   -6    core/CMakeLists.txt

https://invent.kde.org/graphics/digikam/commit/3e95ab4926b1faf34a3c0ca630cc3fe809c926eb
Comment 23 caulier.gilles 2022-03-03 22:16:19 UTC
Git commit 69d6946b6b72c11ed5f7baa356eff38daf97bbc7 by Gilles Caulier.
Committed on 03/03/2022 at 22:05.
Pushed by cgilles into branch 'qt5-maintenance'.

add libheif dependency optional also in qt5-maintenance branch

M  +2    -2    Mainpage.dox
M  +15   -8    core/CMakeLists.txt
M  +9    -3    core/app/DigikamCoreTarget.cmake
M  +3    -0    core/app/utils/digikam_config.h.cmake.in
M  +4    -1    core/dplugins/dimg/CMakeLists.txt
M  +9    -1    core/libs/dialogs/libsinfodlg.cpp
M  +9    -1    core/libs/metadataengine/CMakeLists.txt
M  +4    -0    core/libs/metadataengine/dmetadata/dmetadata.h
M  +8    -1    core/libs/metadataengine/dmetadata/dmetadata_fileio.cpp

https://invent.kde.org/graphics/digikam/commit/69d6946b6b72c11ed5f7baa356eff38daf97bbc7
Comment 24 cvinhaes 2023-04-03 17:45:38 UTC
Same result here, excruciatingly slow times to refresh the preview for .heif files. Win10 with 16gb ram.
Comment 26 caulier.gilles 2023-05-03 12:30:47 UTC

*** This bug has been marked as a duplicate of bug 463486 ***
Comment 27 caulier.gilles 2023-05-09 03:19:04 UTC
@rfeg

UPSTREAM bugs from libheif:

https://github.com/strukturag/libheif/issues/645
https://github.com/strukturag/libheif/issues/552
https://github.com/strukturag/libheif/issues/472
https://github.com/strukturag/libheif/issues/133

Select right one and continue this discussion on github bugzilla from libheif. Nothing can be done in digiKam code to improve the performances.

Gilles Caulier
Comment 28 caulier.gilles 2024-06-18 11:22:20 UTC
Note: Libheif 1.17.6 provide now an option to use ffmpeg accelerated codec to process HEVC data.

https://github.com/strukturag/libheif/blob/master/CMakeLists.txt#L175

Gilles
Comment 29 Maik Qualmann 2024-06-18 16:32:04 UTC
This FFmpeg plugin is already available here under openSUSE and is currently unusable. It must be uninstalled and replaced by the HEIF decoder. In the first versions it crashed, now a few HEIF files are displayed, but most are not. FFmpeg then often reports the EOF error in the console.

Maik
Comment 30 caulier.gilles 2024-06-18 19:51:38 UTC
It's that i suspected too. I tried on my computer with the same result.

I don't yet enabled this option while compiling HEIF lib with ffmpeg support in the bundles. We needs to wait more time to see this feature more stable and mature.

Gilles