digiKam
dimgheifloader.h
Go to the documentation of this file.
1 /* ============================================================
2  *
3  * This file is a part of digiKam project
4  * https://www.digikam.org
5  *
6  * Date : 2019-09-26
7  * Description : A HEIF IO file for DImg framework
8  *
9  * Copyright (C) 2019-2022 by Gilles Caulier <caulier dot gilles at gmail dot com>
10  *
11  * Other HEIF loader implementions:
12  * https://github.com/KDE/krita/tree/master/plugins/impex/heif
13  * https://github.com/jakar/qt-heif-image-plugin
14  * https://github.com/ImageMagick/ImageMagick/blob/master/coders/heic.c
15  * https://github.com/GNOME/gimp/blob/master/plug-ins/common/file-heif.c
16  *
17  * Specification: https://nokiatech.github.io/heif/technical.html
18  *
19  * This program is free software; you can redistribute it
20  * and/or modify it under the terms of the GNU General
21  * Public License as published by the Free Software Foundation;
22  * either version 2, or (at your option)
23  * any later version.
24  *
25  * This program is distributed in the hope that it will be useful,
26  * but WITHOUT ANY WARRANTY; without even the implied warranty of
27  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
28  * GNU General Public License for more details.
29  *
30  * ============================================================ */
31 
32 #ifndef DIGIKAM_DIMG_HEIF_LOADER_H
33 #define DIGIKAM_DIMG_HEIF_LOADER_H
34 
35 // Local includes
36 
37 #include "dimg.h"
38 #include "dimgloader.h"
39 #include "heif.h"
40 
41 using namespace Digikam;
42 
43 namespace Digikam
44 {
45 
46 class DImgHEIFLoader : public DImgLoader
47 {
48 
49 public:
50 
51  explicit DImgHEIFLoader(DImg* const image);
52  ~DImgHEIFLoader() override;
53 
54  bool load(const QString& filePath, DImgLoaderObserver* const observer) override;
55  bool save(const QString& filePath, DImgLoaderObserver* const observer) override;
56 
57  bool hasAlpha() const override;
58  bool sixteenBit() const override;
59  bool isReadOnly() const override;
60 
65  static int x265MaxBitsDepth();
66 
67 private:
68 
69  bool isHeifSuccess(struct heif_error* const error);
70 
72 
73  bool readHEICColorProfile(struct heif_image_handle* const image_handle);
74  bool readHEICImageByID(struct heif_context* const heif_context,
75  heif_item_id image_id);
76 
77  bool readHEICImageByHandle(struct heif_image_handle* image_handle,
78  struct heif_image* heif_image, bool loadImageData);
79 
81 
82  bool saveHEICColorProfile(struct heif_image* const image);
83 
84  bool saveHEICMetadata(struct heif_context* const heif_context,
85  struct heif_image_handle* const image_handle);
86 
87 private:
88 
89  bool m_sixteenBit;
90  bool m_hasAlpha;
91 
92  DImgLoaderObserver* m_observer;
93 };
94 
95 } // namespace Digikam
96 
97 #endif // DIGIKAM_DIMG_HEIF_LOADER_H
Definition: dimgheifloader.h:47
~DImgHEIFLoader() override
Definition: dimgheifloader.cpp:44
bool hasAlpha() const override
Definition: dimgheifloader.cpp:48
bool sixteenBit() const override
Definition: dimgheifloader.cpp:53
bool isReadOnly() const override
Definition: dimgheifloader.cpp:58
bool save(const QString &filePath, DImgLoaderObserver *const observer) override
Definition: dimgheifloader_save.cpp:134
bool load(const QString &filePath, DImgLoaderObserver *const observer) override
Definition: dimgheifloader_load.cpp:46
DImgHEIFLoader(DImg *const image)
Definition: dimgheifloader.cpp:36
static int x265MaxBitsDepth()
Definition: dimgheifloader_save.cpp:98
Definition: dimgloaderobserver.h:41
Definition: dimgloader.h:51
Definition: dimg.h:62
uint32_t heif_item_id
Definition: heif.h:276
Definition: datefolderview.cpp:43
Definition: heif_api_structs.h:45
Definition: heif.h:264
Definition: heif_api_structs.h:30
Definition: heif_api_structs.h:39