1 /* 2 * Copyright (C) 2022-2023 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 FRAMEWORKS_SERVICES_THUMBNAIL_SERVICE_INCLUDE_THUMBNAIL_UTILS_H_ 17 #define FRAMEWORKS_SERVICES_THUMBNAIL_SERVICE_INCLUDE_THUMBNAIL_UTILS_H_ 18 19 #include <mutex> 20 #include <condition_variable> 21 22 #include "ability_context.h" 23 #include "avmetadatahelper.h" 24 #include "datashare_result_set.h" 25 #include "image_source.h" 26 #include "medialibrary_rdbstore.h" 27 #include "rdb_helper.h" 28 #include "rdb_predicates.h" 29 #include "single_kvstore.h" 30 #include "thumbnail_const.h" 31 #include "thumbnail_data.h" 32 33 namespace OHOS { 34 namespace Media { 35 #define EXPORT __attribute__ ((visibility ("default"))) 36 struct ThumbRdbOpt { 37 EXPORT std::shared_ptr<MediaLibraryRdbStore> store; 38 #ifdef DISTRIBUTED 39 EXPORT std::shared_ptr<DistributedKv::SingleKvStore> kvStore; 40 #endif 41 EXPORT std::shared_ptr<AbilityRuntime::Context> context; 42 EXPORT std::string networkId; 43 EXPORT std::string path; 44 EXPORT std::string table; 45 EXPORT std::string udid; 46 EXPORT std::string row; 47 EXPORT std::string uri; 48 EXPORT std::string dateAdded; 49 EXPORT std::string dateTaken; 50 EXPORT std::string fileUri; 51 EXPORT std::string fileId; 52 EXPORT Size screenSize; 53 }; 54 55 class ThumbnailUtils { 56 public: 57 EXPORT ThumbnailUtils() = delete; 58 EXPORT ~ThumbnailUtils() = delete; 59 // utils 60 EXPORT static bool ResizeImage(const std::vector<uint8_t> &data, const Size &size, 61 std::unique_ptr<PixelMap> &pixelMap); 62 EXPORT static bool CompressImage(std::shared_ptr<PixelMap> &pixelMap, std::vector<uint8_t> &data, 63 bool isHigh = false, bool isAstc = false, bool forceSdr = true); 64 EXPORT static bool CompressPicture(ThumbnailData &data, bool isSourceEx); 65 EXPORT static bool CopyPictureSource(std::shared_ptr<Picture> &picture, std::shared_ptr<Picture> ©Source); 66 EXPORT static bool CleanThumbnailInfo(ThumbRdbOpt &opts, bool withThumb, bool withLcd = false); 67 68 // RDB Store Query 69 EXPORT static std::shared_ptr<NativeRdb::ResultSet> QueryThumbnailInfo(ThumbRdbOpt &opts, 70 ThumbnailData &data, int &err); 71 #ifdef DISTRIBUTED 72 EXPORT static bool QueryRemoteThumbnail(ThumbRdbOpt &opts, ThumbnailData &data, int &err); 73 // KV Store 74 EXPORT static bool RemoveDataFromKv(const std::shared_ptr<DistributedKv::SingleKvStore> &kvStore, 75 const std::string &key); 76 EXPORT static bool IsImageExist(const std::string &key, const std::string &networkId, 77 const std::shared_ptr<DistributedKv::SingleKvStore> &kvStore); 78 EXPORT static bool DeleteDistributeLcdData(ThumbRdbOpt &opts, ThumbnailData &thumbnailData); 79 #endif 80 EXPORT static bool DeleteThumbFile(ThumbnailData &data, ThumbnailType type); 81 EXPORT static bool DeleteThumbExDir(ThumbnailData &data); 82 #ifdef DISTRIBUTED 83 EXPORT static bool DeleteDistributeThumbnailInfo(ThumbRdbOpt &opts); 84 #endif 85 86 EXPORT static bool DeleteOriginImage(ThumbRdbOpt &opts); 87 EXPORT static bool DoDeleteMonthAndYearAstc(ThumbRdbOpt &opts); 88 // Steps 89 EXPORT static bool LoadSourceImage(ThumbnailData &data); 90 EXPORT static bool GenTargetPixelmap(ThumbnailData &data, const Size &desiredSize); 91 92 EXPORT static int TrySaveFile(ThumbnailData &Data, ThumbnailType type); 93 EXPORT static bool UpdateLcdInfo(ThumbRdbOpt &opts, ThumbnailData &data, int &err); 94 EXPORT static bool UpdateVisitTime(ThumbRdbOpt &opts, ThumbnailData &data, int &err); 95 EXPORT static bool UpdateLcdReadyStatus(ThumbRdbOpt &opts, ThumbnailData &data, int &err, LcdReady status); 96 EXPORT static bool DoUpdateAstcDateTaken(ThumbRdbOpt &opts, ThumbnailData &data); 97 #ifdef DISTRIBUTED 98 EXPORT static bool DoUpdateRemoteThumbnail(ThumbRdbOpt &opts, ThumbnailData &data, int &err); 99 #endif 100 101 // RDB Store generate and aging 102 EXPORT static bool QueryLcdCount(ThumbRdbOpt &opts, int &outLcdCount, int &err); 103 EXPORT static bool QueryDistributeLcdCount(ThumbRdbOpt &opts, int &outLcdCount, int &err); 104 EXPORT static bool QueryAgingLcdInfos(ThumbRdbOpt &opts, int LcdLimit, 105 std::vector<ThumbnailData> &infos, int &err); 106 #ifdef DISTRIBUTED 107 EXPORT static bool QueryAgingDistributeLcdInfos(ThumbRdbOpt &opts, int LcdLimit, 108 std::vector<ThumbnailData> &infos, int &err); 109 #endif 110 EXPORT static bool QueryNoLcdInfos(ThumbRdbOpt &opts, std::vector<ThumbnailData> &infos, int &err); 111 EXPORT static bool QueryLocalNoLcdInfos(ThumbRdbOpt &opts, std::vector<ThumbnailData> &infos, int &err); 112 EXPORT static bool QueryNoThumbnailInfos(ThumbRdbOpt &opts, std::vector<ThumbnailData> &infos, int &err); 113 EXPORT static bool QueryUpgradeThumbnailInfos(ThumbRdbOpt &opts, std::vector<ThumbnailData> &infos, 114 bool isWifiConnected, int &err); 115 EXPORT static bool QueryNoAstcInfosRestored(ThumbRdbOpt &opts, std::vector<ThumbnailData> &infos, int &err); 116 EXPORT static bool QueryNoAstcInfos(ThumbRdbOpt &opts, std::vector<ThumbnailData> &infos, int &err); 117 EXPORT static bool QueryNewThumbnailCount(ThumbRdbOpt &opts, const int64_t &time, int &count, int &err); 118 EXPORT static bool QueryNoAstcInfosOnDemand(ThumbRdbOpt &opts, 119 std::vector<ThumbnailData> &infos, NativeRdb::RdbPredicates &rdbPredicate, int &err); 120 121 #ifdef DISTRIBUTED 122 EXPORT static bool QueryDeviceThumbnailRecords(ThumbRdbOpt &opts, std::vector<ThumbnailData> &infos, int &err); 123 #endif 124 EXPORT static bool QueryLcdCountByTime(const int64_t &time, const bool &before, ThumbRdbOpt &opts, int &outLcdCount, 125 int &err); 126 EXPORT static bool ResizeThumb(int& width, int& height); 127 EXPORT static bool ResizeLcd(int& width, int& height); 128 EXPORT static bool IsSupportGenAstc(); 129 EXPORT static void QueryThumbnailDataFromFileId(ThumbRdbOpt &opts, const std::string &id, 130 ThumbnailData &data, int &err); 131 EXPORT static bool CheckDateTaken(ThumbRdbOpt &opts, ThumbnailData &data); 132 EXPORT static void GetThumbnailInfo(ThumbRdbOpt &opts, ThumbnailData &outData); 133 EXPORT static bool ScaleThumbnailFromSource(ThumbnailData &data, bool isSourceEx); 134 EXPORT static bool ScaleTargetPixelMap(std::shared_ptr<PixelMap> &dataSource, const Size &targetSize, 135 const AntiAliasingOption &option); 136 EXPORT static bool CenterScaleEx(std::shared_ptr<PixelMap> &dataSource, const Size &desiredSize, 137 const std::string path); 138 EXPORT static std::string GetThumbnailSuffix(ThumbnailType type); 139 140 EXPORT static void RecordStartGenerateStats(ThumbnailData::GenerateStats &stats, GenerateScene scene, 141 LoadSourceType sourceType); 142 EXPORT static void RecordCostTimeAndReport(ThumbnailData::GenerateStats &stats); 143 144 EXPORT static bool GetLocalThumbSize(const ThumbnailData &data, const ThumbnailType& type, Size& size); 145 EXPORT static void SetThumbnailSizeValue(NativeRdb::ValuesBucket& values, Size& size, const std::string& column); 146 EXPORT static bool LoadVideoFile(ThumbnailData &data, Size &desiredSize); 147 EXPORT static bool CheckCloudThumbnailDownloadFinish(const std::shared_ptr<MediaLibraryRdbStore> rdbStorePtr); 148 EXPORT static bool QueryOldKeyAstcInfos(const std::shared_ptr<MediaLibraryRdbStore> rdbStorePtr, 149 const std::string &table, std::vector<ThumbnailData> &infos); 150 151 private: 152 EXPORT static std::shared_ptr<NativeRdb::ResultSet> QueryThumbnailSet(ThumbRdbOpt &opts); 153 EXPORT static int SaveThumbDataToLocalDir(ThumbnailData &data, const std::string &suffix, 154 uint8_t *output, const int writeSize); 155 EXPORT static int ToSaveFile(ThumbnailData &data, const std::string &fileName, 156 uint8_t *output, const int &writeSize); 157 EXPORT static int SaveFileCreateDir(const std::string &path, const std::string &suffix, std::string &fileName); 158 EXPORT static int32_t SetSource(std::shared_ptr<AVMetadataHelper> avMetadataHelper, const std::string &path); 159 EXPORT static int64_t UTCTimeMilliSeconds(); 160 EXPORT static void ParseQueryResult(const std::shared_ptr<NativeRdb::ResultSet> &resultSet, 161 ThumbnailData &data, int &err, const std::vector<std::string> &column); 162 EXPORT static void ParseStringResult(const std::shared_ptr<NativeRdb::ResultSet> &resultSet, 163 int index, std::string &data, int &err); 164 165 EXPORT static bool CheckResultSetCount(const std::shared_ptr<NativeRdb::ResultSet> &resultSet, int &err); 166 // utils 167 EXPORT static bool LoadImageFile(ThumbnailData &data, Size &desiredSize); 168 EXPORT static bool LoadAudioFileInfo(std::shared_ptr<AVMetadataHelper> avMetadataHelper, ThumbnailData &data, 169 Size &desiredSize, uint32_t &errCode); 170 EXPORT static bool LoadAudioFile(ThumbnailData &data, Size &desiredSize); 171 EXPORT static bool ConvertStrToInt32(const std::string &str, int32_t &ret); 172 EXPORT static bool ParseVideoSize(std::shared_ptr<AVMetadataHelper> &avMetadataHelper, 173 int32_t &videoWidth, int32_t &videoHeight); 174 #ifdef DISTRIBUTED 175 // RDB Store 176 EXPORT static bool GetUdidByNetworkId(ThumbRdbOpt &opts, const std::string &networkId, 177 std::string &outUdid, int &err); 178 EXPORT static bool UpdateRemoteThumbnailInfo(ThumbRdbOpt &opts, ThumbnailData &data, int &err); 179 EXPORT static bool InsertRemoteThumbnailInfo(ThumbRdbOpt &opts, ThumbnailData &data, int &err); 180 EXPORT static bool CleanDistributeLcdInfo(ThumbRdbOpt &opts); 181 #endif 182 183 // scale 184 EXPORT static bool ScaleFastThumb(ThumbnailData &data, const Size &size); 185 186 EXPORT static int SaveAstcDataToKvStore(ThumbnailData &data, const ThumbnailType &type); 187 EXPORT static bool DeleteAstcDataFromKvStore(ThumbRdbOpt &opts, const ThumbnailType &type); 188 EXPORT static bool UpdateAstcDateTakenFromKvStore(ThumbRdbOpt &opts, const ThumbnailData &data); 189 }; 190 } // namespace Media 191 } // namespace OHOS 192 193 #endif // FRAMEWORKS_SERVICES_THUMBNAIL_SERVICE_INCLUDE_THUMBNAIL_UTILS_H_ 194