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