1 /*
2  * Copyright (C) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef PLUGINS_COMMON_LIBS_IMAGE_LIBEXTPLUGIN_INCLUDE_HEIF_PARSER_HEIF_IMAGE_H
17 #define PLUGINS_COMMON_LIBS_IMAGE_LIBEXTPLUGIN_INCLUDE_HEIF_PARSER_HEIF_IMAGE_H
18 
19 #include "box/item_property_color_box.h"
20 #include "box/item_property_display_box.h"
21 #include "heif_type.h"
22 
23 namespace OHOS {
24 namespace ImagePlugin {
25 class HeifImage {
26 public:
27     explicit HeifImage(heif_item_id itemId);
28 
29     ~HeifImage();
30 
31     heif_item_id GetItemId() const;
32 
33     bool IsPrimaryImage() const;
34 
35     void SetPrimaryImage(bool flag);
36 
37     uint32_t GetOriginalWidth() const;
38 
39     uint32_t GetOriginalHeight() const;
40 
41     void SetOriginalSize(uint32_t width, uint32_t height);
42 
43     int GetRotateDegrees() const;
44 
45     void SetRotateDegrees(int degrees);
46 
47     HeifTransformMirrorDirection GetMirrorDirection() const;
48 
49     void SetMirrorDirection(HeifTransformMirrorDirection direction);
50 
51     bool IsResolutionReverse() const;
52 
53     uint32_t GetWidth() const;
54 
55     uint32_t GetHeight() const;
56 
57     int GetLumaBitNum() const;
58 
59     void SetLumaBitNum(int bitNum);
60 
61     int GetChromaBitNum() const;
62 
63     void SetChromaBitNum(int bitNum);
64 
65     HeifColorFormat GetDefaultColorFormat() const;
66 
67     int GetColorRangeFlag() const;
68 
69     void SetColorRangeFlag(int flag);
70 
71     void SetDefaultColorFormat(HeifColorFormat format);
72 
73     HeifPixelFormat GetDefaultPixelFormat() const;
74 
75     void SetDefaultPixelFormat(HeifPixelFormat format);
76 
77     void SetThumbnailImage(heif_item_id id);
78 
79     void AddThumbnailImage(const std::shared_ptr<HeifImage> &img);
80 
81     bool IsThumbnailImage() const;
82 
83     const std::vector<std::shared_ptr<HeifImage>> &GetThumbnailImages() const;
84 
85     bool IsAuxImage() const;
86 
87     const std::string &GetAuxImageType() const;
88 
89     std::vector<std::shared_ptr<HeifImage>> GetAuxImages() const;
90 
91     std::shared_ptr<HeifImage> GetAlphaImage() const;
92 
93     void SetAuxImage(heif_item_id id, const std::string &aux_type);
94 
95     void AddAuxImage(std::shared_ptr<HeifImage> img);
96 
97     const std::vector<std::shared_ptr<HeifMetadata>> &GetAllMetadata() const;
98 
99     void AddMetadata(std::shared_ptr<HeifMetadata> metadata);
100 
101     const std::shared_ptr<const HeifNclxColorProfile> &GetNclxColorProfile() const;
102 
103     const std::shared_ptr<const HeifRawColorProfile> &GetRawColorProfile() const;
104 
105     void SetColorProfile(const std::shared_ptr<const HeifColorProfile> &profile);
106     void SetGainmapMasterImage(heif_item_id id);
107     void AddGainmapImage(std::shared_ptr<HeifImage>& img);
108     std::shared_ptr<HeifImage> GetGainmapImage() const;
109     void SetTmapBoxId(heif_item_id id);
110     void SetStaticMetadata(std::vector<uint8_t>& display, std::vector<uint8_t>& lightInfo);
111     void SetUWAInfo(std::vector<uint8_t>& uwaInfo);
112     void SetISOMetadata(std::vector<uint8_t>& isoMetadata);
113     void SetFragmentMetadata(HeifFragmentMetadata fragmentMetadata);
114     std::vector<uint8_t> GetDisplayInfo();
115     std::vector<uint8_t> GetLightInfo();
116     std::vector<uint8_t> GetUWAInfo();
117     std::vector<uint8_t> GetISOMetadata();
118     HeifFragmentMetadata GetFragmentMetadata();
119 
120 private:
121     heif_item_id itemId_ = 0;
122     bool isPrimaryImage_ = false;
123 
124     uint32_t originalWidth_ = 0;
125     uint32_t originalHeight_ = 0;
126     int rotateDegrees_ = 0;
127     HeifTransformMirrorDirection mirrorDirection_ = HeifTransformMirrorDirection::INVALID;
128 
129     HeifColorFormat defaultColorFormat_ = HeifColorFormat::UNDEDEFINED;
130     HeifPixelFormat defaultPixelFormat_ = HeifPixelFormat::UNDEFINED;
131 
132     int lumaBitNum_ = -1;
133     int chromaBitNum_ = -1;
134     int colorRangeFlag_ = 1;
135 
136     heif_item_id thumbnailMasterItemId_ = 0;
137     std::vector<std::shared_ptr<HeifImage>> m_thumbnails;
138 
139     heif_item_id auxMasterItemId_ = 0;
140     std::string auxType_;
141     std::vector<std::shared_ptr<HeifImage>> auxImages_;
142 
143     std::vector<std::shared_ptr<HeifMetadata>> allMetadata_;
144 
145     std::shared_ptr<const HeifNclxColorProfile> nclxColorProfile_;
146     std::shared_ptr<const HeifRawColorProfile> rawColorProfile_;
147 
148     heif_item_id gainmapMasterItemid_ = 0;
149     std::shared_ptr<HeifImage> gainmapImage_;
150     heif_item_id tmapId_;
151     std::vector<uint8_t> lightInfo_;
152     std::vector<uint8_t> displayInfo_;
153     std::vector<uint8_t> uwaInfo_;
154     std::vector<uint8_t> isoMetadata_;
155     HeifFragmentMetadata fragmentMetadata_;
156 };
157 } // namespace ImagePlugin
158 } // namespace OHOS
159 
160 #endif // PLUGINS_COMMON_LIBS_IMAGE_LIBEXTPLUGIN_INCLUDE_HEIF_PARSER_HEIF_IMAGE_H
161