Created attachment 127955 [details] Samsung Galaxy S10 HEIC image file SUMMARY STEPS TO REPRODUCE 1. Take a photo with my Samsung Galaxy S10, Android 10 2. Copy the image to hardisk directory of a album in DigiKam 3. Right click album and select Refresh OBSERVED RESULT No Exif information are readed from file indluded orientation. Portrait images will be presented as landscape EXPECTED RESULT Exif info would be presenten and portrait imags shoul rotate SOFTWARE/OS VERSIONS Windows: 10 1909 macOS: Linux/KDE Plasma: (available in About System) KDE Plasma Version: KDE Frameworks Version: Qt Version: ADDITIONAL INFORMATION
I close the bug as UPSTREAM. The problem is the lack of support in Exiv2. We use Exiv2 to read and write metadata. Exiv2 has already started analyzing the HEIC and CR3 files, at the moment there are patent law concerns in the team. We have to wait and see what happens next. Maik
Maik, For info, the most updated upstream fril from Exiv2 about HEIf support is this one : https://github.com/Exiv2/exiv2/pull/978 How did you interpret the last comment from this thread ? HEIF will be supported with Exiv2 0.27.3 or not ? I'm following all discussions from Exiv2 team about HEIF support, and it's become i real mess... They talk about patents problem where no problem exists with HEIF format. Only encoding image with H265 codec is patented (this is why i don't include libx265 source code in HEIF dplugin. HEIF format is open, decoding h265 is not patented at all. extracting metadata is not a problem too.. For me HEIF support is a big major feature to support and improve in digiKam. Gilles
Ok, I missed this thread, that sounds better. Maik
It's good that DigiKam can retain the HEIC file's EXIF data when converting a heic file to jpg. It does this correctly when opening a heic file from "Item-Open ..." and then "File-Export" and save as "JPEG Image (...)". Good work!
Would it be possible to use this conversion code to get an EXIF, from a jpg header, to read from the heic file to the database?
Well no. In fact load HIEC file in image editor or BQM decode the image with libheif that i patched officially in the project to be able to extract Exif, Iptc, or Xmp chunk. Loading metadat to populate the database use Exiv2 shared library, and do not require to decode whole image for performance reasons. I proposed a patch to Exiv2 to support at lead a metadata chunk extraction (read only, but it have be refused. The reason is HEIF is a container which can include X265 image data and it's patented. So Exiv2 team won't to take a risk... but in fact there is no patent problem with HEIF container. Format is open and extracting metadat to not decode or encode X265 stream. So it's safe. The only problem with patents is about to encode x265 stream. decoding is also patent safe. I try to explain the problem to Exiv2 team, but my contribution have been rejected violently. No way. Just by curiosity, take a look to all bugzilla entries around HEIF support in exiv2, and read the story... It's a big pain definitively... https://github.com/Exiv2/exiv2/issues?q=+heif+ This is a main reason that i would not to contribute to Exiv2 n the future. I'm an human after all... Gilles Caulier
Created attachment 129053 [details] HEIC handling in albums/windows photos/exiftool Dear Gilles, is there a way to handle HEIF/HEIC files separately in digikam albums until someone finally adds support to Exiv2? It seems to become a never ending story in Exiv2, "clanmills" wrote 3 days ago "I will never work on ISOBMFF." https://github.com/Exiv2/exiv2/issues/1066#issuecomment-636839592 and on April 7th "We will not be proceeding with #1066 because the proposal was rejected by the community." https://github.com/Exiv2/exiv2/pull/978#issuecomment-610223481 and 3 days ago he wrote "v0.27.3 does not include support for ISOBMFF containers (CR3, AVIV, HEIF). Perhaps a volunteer will add this to Exiv2." https://github.com/darktable-org/rawspeed/issues/121#issuecomment-636817674 Windows 10 and Exiftool read the EXIF data without problems since May 2018 (see screenshot). It's kind of a show stopper in using digikam with HEIC images. So maybe it's worth a workaround? :) I'm not a programmer and I don't know how hard it would be to implement this... Maybe it's not worth the effort, but maybe it is? Best regards, Benny
Benny, Look the last comment here : https://github.com/Exiv2/exiv2/issues/1229#issue-631484908 It's clear, it's just a human problem, not a legal one, to implmeent HEIC metadata support in Exiv2. So please comment on Exiv2 bug file directly. This is the best place to implmement this kind of support. But I know this point since a while... Note: remember that i already proposed a working patch for Exiv2 to support HEIC, but this one have been banned ! So do not ask me to do the job in second time... Best Gilles Caulier
Hi, I try a new attempt with Exiv2 team to integrate HEIF support (read only). https://github.com/Exiv2/exiv2/pull/1233 This pull request is more simple than my previous one as it use libheif from the system instead to embeded library source code in Exiv2. Best Gilles Caulier
Maik, I can integrate this patch in all bundle while Exiv2 library is compiled. At least this will prepare the future, as Exiv2 slow down the HEIF support... What do you think about ? Gilles
Yes of course, then we have a basis to test the patch. Maik
Git commit af8274c76555a87bf9c03e17b90481811017665c by Gilles Caulier. Committed on 10/06/2020 at 12:39. Pushed by cgilles into branch 'master'. First stage to support reading HEIF metadata in digiKam core metadataengine: share libheif and libde265 between DMetadata in HEIF DImg plugin. The expected way was to use system libraries (libheif and libde265) instead the embeded solution, but the detection of libde265 in libheif use an older Cmake way and fail to configure the HEIF parser with the X265 decoder. It's cleary a bug in libheif and i will propose a PR to fix the problem. So the temporary solution will be to continue to host both libraries in digiKam core until this problem was solved and new version of libraries published over the world. Next stage: use libheif to load metadata for HEIF files instead Exiv2, which will do not support this file for a while... M +11 -0 core/app/DigikamCoreTarget.cmake M +0 -219 core/dplugins/dimg/heif/CMakeLists.txt M +1 -0 core/libs/CMakeLists.txt C +19 -38 core/libs/heifutils/CMakeLists.txt [from: core/dplugins/dimg/heif/CMakeLists.txt - 081% similarity] A +3 -0 core/libs/heifutils/README R +0 -0 core/libs/heifutils/libde265/README [from: core/dplugins/dimg/heif/libde265/README - 100% similarity] R +0 -0 core/libs/heifutils/libde265/acceleration.h [from: core/dplugins/dimg/heif/libde265/acceleration.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/alloc_pool.cc [from: core/dplugins/dimg/heif/libde265/alloc_pool.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/alloc_pool.h [from: core/dplugins/dimg/heif/libde265/alloc_pool.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/bitstream.cc [from: core/dplugins/dimg/heif/libde265/bitstream.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/bitstream.h [from: core/dplugins/dimg/heif/libde265/bitstream.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/cabac.cc [from: core/dplugins/dimg/heif/libde265/cabac.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/cabac.h [from: core/dplugins/dimg/heif/libde265/cabac.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/configparam.cc [from: core/dplugins/dimg/heif/libde265/configparam.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/configparam.h [from: core/dplugins/dimg/heif/libde265/configparam.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/contextmodel.cc [from: core/dplugins/dimg/heif/libde265/contextmodel.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/contextmodel.h [from: core/dplugins/dimg/heif/libde265/contextmodel.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/de265-version.h.in [from: core/dplugins/dimg/heif/libde265/de265-version.h.in - 100% similarity] R +0 -0 core/libs/heifutils/libde265/de265.cc [from: core/dplugins/dimg/heif/libde265/de265.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/de265.h [from: core/dplugins/dimg/heif/libde265/de265.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/deblock.cc [from: core/dplugins/dimg/heif/libde265/deblock.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/deblock.h [from: core/dplugins/dimg/heif/libde265/deblock.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/decctx.cc [from: core/dplugins/dimg/heif/libde265/decctx.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/decctx.h [from: core/dplugins/dimg/heif/libde265/decctx.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/dpb.cc [from: core/dplugins/dimg/heif/libde265/dpb.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/dpb.h [from: core/dplugins/dimg/heif/libde265/dpb.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/en265.cc [from: core/dplugins/dimg/heif/libde265/en265.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/en265.h [from: core/dplugins/dimg/heif/libde265/en265.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/algo/algo.cc [from: core/dplugins/dimg/heif/libde265/encoder/algo/algo.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/algo/algo.h [from: core/dplugins/dimg/heif/libde265/encoder/algo/algo.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/algo/cb-interpartmode.cc [from: core/dplugins/dimg/heif/libde265/encoder/algo/cb-interpartmode.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/algo/cb-interpartmode.h [from: core/dplugins/dimg/heif/libde265/encoder/algo/cb-interpartmode.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/algo/cb-intra-inter.cc [from: core/dplugins/dimg/heif/libde265/encoder/algo/cb-intra-inter.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/algo/cb-intra-inter.h [from: core/dplugins/dimg/heif/libde265/encoder/algo/cb-intra-inter.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/algo/cb-intrapartmode.cc [from: core/dplugins/dimg/heif/libde265/encoder/algo/cb-intrapartmode.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/algo/cb-intrapartmode.h [from: core/dplugins/dimg/heif/libde265/encoder/algo/cb-intrapartmode.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/algo/cb-mergeindex.cc [from: core/dplugins/dimg/heif/libde265/encoder/algo/cb-mergeindex.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/algo/cb-mergeindex.h [from: core/dplugins/dimg/heif/libde265/encoder/algo/cb-mergeindex.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/algo/cb-skip.cc [from: core/dplugins/dimg/heif/libde265/encoder/algo/cb-skip.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/algo/cb-skip.h [from: core/dplugins/dimg/heif/libde265/encoder/algo/cb-skip.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/algo/cb-split.cc [from: core/dplugins/dimg/heif/libde265/encoder/algo/cb-split.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/algo/cb-split.h [from: core/dplugins/dimg/heif/libde265/encoder/algo/cb-split.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/algo/coding-options.cc [from: core/dplugins/dimg/heif/libde265/encoder/algo/coding-options.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/algo/coding-options.h [from: core/dplugins/dimg/heif/libde265/encoder/algo/coding-options.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/algo/ctb-qscale.cc [from: core/dplugins/dimg/heif/libde265/encoder/algo/ctb-qscale.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/algo/ctb-qscale.h [from: core/dplugins/dimg/heif/libde265/encoder/algo/ctb-qscale.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/algo/pb-mv.cc [from: core/dplugins/dimg/heif/libde265/encoder/algo/pb-mv.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/algo/pb-mv.h [from: core/dplugins/dimg/heif/libde265/encoder/algo/pb-mv.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/algo/tb-intrapredmode.cc [from: core/dplugins/dimg/heif/libde265/encoder/algo/tb-intrapredmode.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/algo/tb-intrapredmode.h [from: core/dplugins/dimg/heif/libde265/encoder/algo/tb-intrapredmode.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/algo/tb-rateestim.cc [from: core/dplugins/dimg/heif/libde265/encoder/algo/tb-rateestim.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/algo/tb-rateestim.h [from: core/dplugins/dimg/heif/libde265/encoder/algo/tb-rateestim.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/algo/tb-split.cc [from: core/dplugins/dimg/heif/libde265/encoder/algo/tb-split.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/algo/tb-split.h [from: core/dplugins/dimg/heif/libde265/encoder/algo/tb-split.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/algo/tb-transform.cc [from: core/dplugins/dimg/heif/libde265/encoder/algo/tb-transform.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/algo/tb-transform.h [from: core/dplugins/dimg/heif/libde265/encoder/algo/tb-transform.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/encoder-context.cc [from: core/dplugins/dimg/heif/libde265/encoder/encoder-context.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/encoder-context.h [from: core/dplugins/dimg/heif/libde265/encoder/encoder-context.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/encoder-core.cc [from: core/dplugins/dimg/heif/libde265/encoder/encoder-core.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/encoder-core.h [from: core/dplugins/dimg/heif/libde265/encoder/encoder-core.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/encoder-intrapred.cc [from: core/dplugins/dimg/heif/libde265/encoder/encoder-intrapred.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/encoder-intrapred.h [from: core/dplugins/dimg/heif/libde265/encoder/encoder-intrapred.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/encoder-motion.cc [from: core/dplugins/dimg/heif/libde265/encoder/encoder-motion.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/encoder-motion.h [from: core/dplugins/dimg/heif/libde265/encoder/encoder-motion.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/encoder-params.cc [from: core/dplugins/dimg/heif/libde265/encoder/encoder-params.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/encoder-params.h [from: core/dplugins/dimg/heif/libde265/encoder/encoder-params.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/encoder-syntax.cc [from: core/dplugins/dimg/heif/libde265/encoder/encoder-syntax.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/encoder-syntax.h [from: core/dplugins/dimg/heif/libde265/encoder/encoder-syntax.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/encoder-types.cc [from: core/dplugins/dimg/heif/libde265/encoder/encoder-types.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/encoder-types.h [from: core/dplugins/dimg/heif/libde265/encoder/encoder-types.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/encpicbuf.cc [from: core/dplugins/dimg/heif/libde265/encoder/encpicbuf.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/encpicbuf.h [from: core/dplugins/dimg/heif/libde265/encoder/encpicbuf.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/sop.cc [from: core/dplugins/dimg/heif/libde265/encoder/sop.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/encoder/sop.h [from: core/dplugins/dimg/heif/libde265/encoder/sop.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/extra/win32cond.cc [from: core/dplugins/dimg/heif/libde265/extra/win32cond.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/extra/win32cond.h [from: core/dplugins/dimg/heif/libde265/extra/win32cond.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/fallback-dct.cc [from: core/dplugins/dimg/heif/libde265/fallback-dct.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/fallback-dct.h [from: core/dplugins/dimg/heif/libde265/fallback-dct.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/fallback-motion.cc [from: core/dplugins/dimg/heif/libde265/fallback-motion.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/fallback-motion.h [from: core/dplugins/dimg/heif/libde265/fallback-motion.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/fallback.cc [from: core/dplugins/dimg/heif/libde265/fallback.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/fallback.h [from: core/dplugins/dimg/heif/libde265/fallback.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/image-io.cc [from: core/dplugins/dimg/heif/libde265/image-io.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/image-io.h [from: core/dplugins/dimg/heif/libde265/image-io.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/image.cc [from: core/dplugins/dimg/heif/libde265/image.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/image.h [from: core/dplugins/dimg/heif/libde265/image.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/intrapred.cc [from: core/dplugins/dimg/heif/libde265/intrapred.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/intrapred.h [from: core/dplugins/dimg/heif/libde265/intrapred.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/md5.cc [from: core/dplugins/dimg/heif/libde265/md5.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/md5.h [from: core/dplugins/dimg/heif/libde265/md5.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/motion.cc [from: core/dplugins/dimg/heif/libde265/motion.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/motion.h [from: core/dplugins/dimg/heif/libde265/motion.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/nal-parser.cc [from: core/dplugins/dimg/heif/libde265/nal-parser.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/nal-parser.h [from: core/dplugins/dimg/heif/libde265/nal-parser.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/nal.cc [from: core/dplugins/dimg/heif/libde265/nal.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/nal.h [from: core/dplugins/dimg/heif/libde265/nal.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/pps.cc [from: core/dplugins/dimg/heif/libde265/pps.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/pps.h [from: core/dplugins/dimg/heif/libde265/pps.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/quality.cc [from: core/dplugins/dimg/heif/libde265/quality.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/quality.h [from: core/dplugins/dimg/heif/libde265/quality.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/refpic.cc [from: core/dplugins/dimg/heif/libde265/refpic.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/refpic.h [from: core/dplugins/dimg/heif/libde265/refpic.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/sao.cc [from: core/dplugins/dimg/heif/libde265/sao.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/sao.h [from: core/dplugins/dimg/heif/libde265/sao.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/scan.cc [from: core/dplugins/dimg/heif/libde265/scan.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/scan.h [from: core/dplugins/dimg/heif/libde265/scan.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/sei.cc [from: core/dplugins/dimg/heif/libde265/sei.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/sei.h [from: core/dplugins/dimg/heif/libde265/sei.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/slice.cc [from: core/dplugins/dimg/heif/libde265/slice.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/slice.h [from: core/dplugins/dimg/heif/libde265/slice.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/sps.cc [from: core/dplugins/dimg/heif/libde265/sps.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/sps.h [from: core/dplugins/dimg/heif/libde265/sps.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/threads.cc [from: core/dplugins/dimg/heif/libde265/threads.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/threads.h [from: core/dplugins/dimg/heif/libde265/threads.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/transform.cc [from: core/dplugins/dimg/heif/libde265/transform.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/transform.h [from: core/dplugins/dimg/heif/libde265/transform.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/util.cc [from: core/dplugins/dimg/heif/libde265/util.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/util.h [from: core/dplugins/dimg/heif/libde265/util.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/visualize.cc [from: core/dplugins/dimg/heif/libde265/visualize.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/visualize.h [from: core/dplugins/dimg/heif/libde265/visualize.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/vps.cc [from: core/dplugins/dimg/heif/libde265/vps.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/vps.h [from: core/dplugins/dimg/heif/libde265/vps.h - 100% similarity] R +0 -0 core/libs/heifutils/libde265/vui.cc [from: core/dplugins/dimg/heif/libde265/vui.cc - 100% similarity] R +0 -0 core/libs/heifutils/libde265/vui.h [from: core/dplugins/dimg/heif/libde265/vui.h - 100% similarity] R +0 -0 core/libs/heifutils/libheif/README [from: core/dplugins/dimg/heif/libheif/README - 100% similarity] R +0 -0 core/libs/heifutils/libheif/bitstream.cc [from: core/dplugins/dimg/heif/libheif/bitstream.cc - 100% similarity] R +0 -0 core/libs/heifutils/libheif/bitstream.h [from: core/dplugins/dimg/heif/libheif/bitstream.h - 100% similarity] R +0 -0 core/libs/heifutils/libheif/box.cc [from: core/dplugins/dimg/heif/libheif/box.cc - 100% similarity] R +0 -0 core/libs/heifutils/libheif/box.h [from: core/dplugins/dimg/heif/libheif/box.h - 100% similarity] R +0 -0 core/libs/heifutils/libheif/error.cc [from: core/dplugins/dimg/heif/libheif/error.cc - 100% similarity] R +0 -0 core/libs/heifutils/libheif/error.h [from: core/dplugins/dimg/heif/libheif/error.h - 100% similarity] R +0 -0 core/libs/heifutils/libheif/heif.cc [from: core/dplugins/dimg/heif/libheif/heif.cc - 100% similarity] R +0 -0 core/libs/heifutils/libheif/heif.h [from: core/dplugins/dimg/heif/libheif/heif.h - 100% similarity] R +0 -0 core/libs/heifutils/libheif/heif_api_structs.h [from: core/dplugins/dimg/heif/libheif/heif_api_structs.h - 100% similarity] R +0 -0 core/libs/heifutils/libheif/heif_colorconversion.cc [from: core/dplugins/dimg/heif/libheif/heif_colorconversion.cc - 100% similarity] R +0 -0 core/libs/heifutils/libheif/heif_colorconversion.h [from: core/dplugins/dimg/heif/libheif/heif_colorconversion.h - 100% similarity] R +0 -0 core/libs/heifutils/libheif/heif_context.cc [from: core/dplugins/dimg/heif/libheif/heif_context.cc - 100% similarity] R +0 -0 core/libs/heifutils/libheif/heif_context.h [from: core/dplugins/dimg/heif/libheif/heif_context.h - 100% similarity] R +0 -0 core/libs/heifutils/libheif/heif_cxx.h [from: core/dplugins/dimg/heif/libheif/heif_cxx.h - 100% similarity] R +0 -0 core/libs/heifutils/libheif/heif_decoder_libde265.cc [from: core/dplugins/dimg/heif/libheif/heif_decoder_libde265.cc - 100% similarity] R +0 -0 core/libs/heifutils/libheif/heif_decoder_libde265.h [from: core/dplugins/dimg/heif/libheif/heif_decoder_libde265.h - 100% similarity] R +0 -0 core/libs/heifutils/libheif/heif_encoder_x265.cc [from: core/dplugins/dimg/heif/libheif/heif_encoder_x265.cc - 100% similarity] R +0 -0 core/libs/heifutils/libheif/heif_encoder_x265.h [from: core/dplugins/dimg/heif/libheif/heif_encoder_x265.h - 100% similarity] R +0 -0 core/libs/heifutils/libheif/heif_file.cc [from: core/dplugins/dimg/heif/libheif/heif_file.cc - 100% similarity] R +0 -0 core/libs/heifutils/libheif/heif_file.h [from: core/dplugins/dimg/heif/libheif/heif_file.h - 100% similarity] R +0 -0 core/libs/heifutils/libheif/heif_hevc.cc [from: core/dplugins/dimg/heif/libheif/heif_hevc.cc - 100% similarity] R +0 -0 core/libs/heifutils/libheif/heif_hevc.h [from: core/dplugins/dimg/heif/libheif/heif_hevc.h - 100% similarity] R +0 -0 core/libs/heifutils/libheif/heif_image.cc [from: core/dplugins/dimg/heif/libheif/heif_image.cc - 100% similarity] R +0 -0 core/libs/heifutils/libheif/heif_image.h [from: core/dplugins/dimg/heif/libheif/heif_image.h - 100% similarity] R +0 -0 core/libs/heifutils/libheif/heif_limits.h [from: core/dplugins/dimg/heif/libheif/heif_limits.h - 100% similarity] R +0 -0 core/libs/heifutils/libheif/heif_plugin.cc [from: core/dplugins/dimg/heif/libheif/heif_plugin.cc - 100% similarity] R +0 -0 core/libs/heifutils/libheif/heif_plugin.h [from: core/dplugins/dimg/heif/libheif/heif_plugin.h - 100% similarity] R +0 -0 core/libs/heifutils/libheif/heif_plugin_registry.cc [from: core/dplugins/dimg/heif/libheif/heif_plugin_registry.cc - 100% similarity] R +0 -0 core/libs/heifutils/libheif/heif_plugin_registry.h [from: core/dplugins/dimg/heif/libheif/heif_plugin_registry.h - 100% similarity] R +0 -0 core/libs/heifutils/libheif/heif_version.h.in [from: core/dplugins/dimg/heif/libheif/heif_version.h.in - 100% similarity] R +0 -0 core/libs/heifutils/libheif/logging.h [from: core/dplugins/dimg/heif/libheif/logging.h - 100% similarity] https://invent.kde.org/graphics/digikam/commit/af8274c76555a87bf9c03e17b90481811017665c
Git commit c7fe9a64c3a6f4f0439a1aa49e43df39a7ee6896 by Gilles Caulier. Committed on 10/06/2020 at 13:34. Pushed by cgilles into branch 'master'. Parse HEIF metadata withpout Exiv2 stage 2: introduce new parser in DMetadata to handle Exif, Iptc, and Xmp with liheif from digiKam core. M +4 -0 core/CMakeLists.txt M +1 -0 core/libs/metadataengine/CMakeLists.txt M +7 -1 core/libs/metadataengine/dmetadata/dmetadata.h M +5 -2 core/libs/metadataengine/dmetadata/dmetadata_fileio.cpp A +311 -0 core/libs/metadataengine/dmetadata/dmetadata_heif.cpp [License: GPL (v2+)] https://invent.kde.org/graphics/digikam/commit/c7fe9a64c3a6f4f0439a1aa49e43df39a7ee6896
Git commit b122cf4bde3bc297c51566b65e993b34cf25ad4e by Gilles Caulier. Committed on 10/06/2020 at 13:56. Pushed by cgilles into branch 'master'. remove HEIF metadata parsing from DImg plugin loader, now this task is delegate to DMetadata M +0 -1 core/dplugins/dimg/heif/dimgheifloader.h M +0 -134 core/dplugins/dimg/heif/dimgheifloader_load.cpp https://invent.kde.org/graphics/digikam/commit/b122cf4bde3bc297c51566b65e993b34cf25ad4e
Hi all, Voilà, now digiKam use libheif to parse HEIF file metadata instead Exiv2. It work like a charm here and image are not decoded to acheive this job. this will populate the database as expected with Exif, Iptc, and Xmp. Of course, HEIF metadata are available as read only for the moment. libheif is not yet able to write metadata without to re-encode whole image file. There is a report about this topic in libheif project. Please ping the developers to look about this feature: https://github.com/strukturag/libheif/issues/127 Other solution is to wait than Exiv2 project support officialy HEIF format. But to be honest, lead coordinator become completely crazy about this topic. I proposed more than time some patches about this feature, all have been banned (closed), and no real code review have been done... This is not how open source collaboration can be done safety for the future. I already write large code for Exiv2 in the pass, i code since more than 35 years now, and i'm an active open-source developer with digiKam since 18 years now : so i know the rules about open source world... To close this topic with Exiv2, i hate to read an amount of troll messages about "possible" patents to parse HEIF data. I said to parse, not to decode/encode X265 streams. Metadata are separated well from compressed data, so it's a safe operation. And in all cases, if a possible patent exist about HEIF parsing, well if we made the HEIF support as optional at configuration time, this will fix definitively the problem at packaging time. Gilles Caulier
Good work! Looking forward to giving it a try :) //Björn
I have now downloaded digiKam-7.0.0-rc-20200611T183340-Win32.tar.xz and imported 4 images from my Samsung S10 in different orientations, and all works very well :) many thanks for good work! Regards Björn
I am totally impressed! Thank you Gilles, really good news! Just downloaded the most recent Win64 version, orientation is shown correctly in the albums and within the "Metadata" all EXIF data is shown :) Is there a way to use the newly extraced informations also for geo location (Map) and for "Item Properties" and "Photograph Properties" like for JPG files? Thanks, Benny
Benny, You need to force the database to re-read metadata from files. You can use maintenance tool or the Item/Rerad metadata menu entry. Gilles Caulier
Sorry, I didn't think about that - just pressed F5 within the album and the orientation got corrected and EXIF-metadata was shown. After using "sync metadata and database > from images metadata to db" the informations are now complete :) Thank you again.
It will never a upstream solution as Exiv2 project drop the idea to support hEIF container. This is why i implemented a work around in digiKam core... I close this file as FIXED