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