Bug 420715 - Can't read EXIF from Samsung S10 HEIC-file
Summary: Can't read EXIF from Samsung S10 HEIC-file
Status: RESOLVED FIXED
Alias: None
Product: digikam
Classification: Applications
Component: Import-Albums (other bugs)
Version First Reported In: 7.0.0
Platform: Microsoft Windows Microsoft Windows
: NOR normal
Target Milestone: ---
Assignee: Digikam Developers
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2020-04-28 17:59 UTC by Björn
Modified: 2020-06-19 21:17 UTC (History)
3 users (show)

See Also:
Latest Commit:
Version Fixed/Implemented In: 7.0.0
Sentry Crash Report:


Attachments
Samsung Galaxy S10 HEIC image file (1.42 MB, application/octet-stream)
2020-04-28 17:59 UTC, Björn
Details
HEIC handling in albums/windows photos/exiftool (1.62 MB, image/png)
2020-06-04 19:14 UTC, Benny
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Björn 2020-04-28 17:59:13 UTC
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
Comment 1 Maik Qualmann 2020-04-28 18:54:06 UTC
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
Comment 2 caulier.gilles 2020-05-01 06:36:05 UTC
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
Comment 3 Maik Qualmann 2020-05-01 08:22:22 UTC
Ok, I missed this thread, that sounds better.

Maik
Comment 4 Björn 2020-05-01 08:54:21 UTC
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!
Comment 5 Björn 2020-05-01 09:08:08 UTC
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?
Comment 6 caulier.gilles 2020-05-01 13:37:33 UTC
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
Comment 7 Benny 2020-06-04 19:14:04 UTC
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
Comment 8 caulier.gilles 2020-06-05 14:05:20 UTC
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
Comment 9 caulier.gilles 2020-06-09 10:00:47 UTC
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
Comment 10 caulier.gilles 2020-06-09 10:07:09 UTC
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
Comment 11 Maik Qualmann 2020-06-09 11:40:39 UTC
Yes of course, then we have a basis to test the patch.

Maik
Comment 12 caulier.gilles 2020-06-10 12:44:30 UTC
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
Comment 13 caulier.gilles 2020-06-10 13:36:29 UTC
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
Comment 14 caulier.gilles 2020-06-10 13:57:56 UTC
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
Comment 15 caulier.gilles 2020-06-10 14:51:57 UTC
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
Comment 16 Björn 2020-06-10 16:46:42 UTC
Good work! Looking forward to giving it a try :)
//Björn
Comment 17 Björn 2020-06-11 19:10:56 UTC
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
Comment 18 Benny 2020-06-11 21:18:28 UTC
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
Comment 19 caulier.gilles 2020-06-12 01:49:05 UTC
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
Comment 20 Benny 2020-06-12 07:17:15 UTC
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.
Comment 21 caulier.gilles 2020-06-19 21:17:42 UTC
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