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