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 "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 dateModified; 51 EXPORT std::string fileUri; 52 EXPORT std::string fileId; 53 EXPORT Size screenSize; 54 }; 55 56 class ThumbnailUtils { 57 public: 58 EXPORT ThumbnailUtils() = delete; 59 EXPORT ~ThumbnailUtils() = delete; 60 // utils 61 EXPORT static bool ResizeImage(const std::vector<uint8_t> &data, const Size &size, 62 std::unique_ptr<PixelMap> &pixelMap); 63 EXPORT static bool CompressImage(std::shared_ptr<PixelMap> &pixelMap, std::vector<uint8_t> &data, 64 bool isAstc = false, bool forceSdr = true, const uint8_t quality = THUMBNAIL_MID); 65 EXPORT static bool CompressPicture(ThumbnailData &data, bool isSourceEx, std::string &tempOutputPath); 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 EXPORT static bool DeleteBeginTimestampDir(ThumbnailData &data); 83 #ifdef DISTRIBUTED 84 EXPORT static bool DeleteDistributeThumbnailInfo(ThumbRdbOpt &opts); 85 #endif 86 87 EXPORT static bool DeleteOriginImage(ThumbRdbOpt &opts); 88 EXPORT static bool DoDeleteMonthAndYearAstc(ThumbRdbOpt &opts); 89 // Steps 90 EXPORT static bool LoadSourceImage(ThumbnailData &data); 91 EXPORT static bool GenTargetPixelmap(ThumbnailData &data, const Size &desiredSize); 92 93 EXPORT static bool SaveAfterPacking(ThumbnailData &data, bool isSourceEx, const std::string &tempOutputPath); 94 EXPORT static void CancelAfterPacking(const std::string &tempOutputPath); 95 EXPORT static int TrySaveFile(ThumbnailData &Data, ThumbnailType type); 96 EXPORT static bool UpdateLcdInfo(ThumbRdbOpt &opts, ThumbnailData &data, int &err); 97 EXPORT static bool UpdateVisitTime(ThumbRdbOpt &opts, ThumbnailData &data, int &err); 98 EXPORT static bool UpdateHighlightInfo(ThumbRdbOpt &opts, ThumbnailData &data, int &err); 99 EXPORT static bool UpdateLcdReadyStatus(ThumbRdbOpt &opts, ThumbnailData &data, int &err, LcdReady status); 100 EXPORT static bool DoUpdateAstcDateTaken(ThumbRdbOpt &opts, ThumbnailData &data); 101 #ifdef DISTRIBUTED 102 EXPORT static bool DoUpdateRemoteThumbnail(ThumbRdbOpt &opts, ThumbnailData &data, int &err); 103 #endif 104 105 // RDB Store generate and aging 106 EXPORT static bool QueryLcdCount(ThumbRdbOpt &opts, int &outLcdCount, int &err); 107 EXPORT static bool QueryDistributeLcdCount(ThumbRdbOpt &opts, int &outLcdCount, int &err); 108 EXPORT static bool QueryAgingLcdInfos(ThumbRdbOpt &opts, int LcdLimit, 109 std::vector<ThumbnailData> &infos, int &err); 110 #ifdef DISTRIBUTED 111 EXPORT static bool QueryAgingDistributeLcdInfos(ThumbRdbOpt &opts, int LcdLimit, 112 std::vector<ThumbnailData> &infos, int &err); 113 #endif 114 EXPORT static bool QueryNoLcdInfos(ThumbRdbOpt &opts, std::vector<ThumbnailData> &infos, int &err); 115 EXPORT static bool QueryLocalNoLcdInfos(ThumbRdbOpt &opts, std::vector<ThumbnailData> &infos, int &err); 116 EXPORT static bool QueryNoThumbnailInfos(ThumbRdbOpt &opts, std::vector<ThumbnailData> &infos, int &err); 117 EXPORT static bool QueryUpgradeThumbnailInfos(ThumbRdbOpt &opts, std::vector<ThumbnailData> &infos, 118 bool isWifiConnected, int &err); 119 EXPORT static bool QueryNoAstcInfosRestored(ThumbRdbOpt &opts, std::vector<ThumbnailData> &infos, int &err, 120 const int32_t &restoreAstcCount); 121 EXPORT static bool QueryLocalNoThumbnailInfos(ThumbRdbOpt &opts, std::vector<ThumbnailData> &infos, int &err); 122 EXPORT static bool QueryNoAstcInfos(ThumbRdbOpt &opts, std::vector<ThumbnailData> &infos, int &err); 123 EXPORT static bool QueryNewThumbnailCount(ThumbRdbOpt &opts, const int64_t &time, int &count, int &err); 124 EXPORT static bool QueryNoAstcInfosOnDemand(ThumbRdbOpt &opts, 125 std::vector<ThumbnailData> &infos, NativeRdb::RdbPredicates &rdbPredicate, int &err); 126 EXPORT static bool QueryNoHighlightInfos(ThumbRdbOpt &opts, std::vector<ThumbnailData> &infos, int &err); 127 EXPORT static bool QueryNoHighlightPath(ThumbRdbOpt &opts, ThumbnailData &data, int &err); 128 EXPORT static bool QueryHighlightTriggerPath(ThumbRdbOpt &opts, ThumbnailData &data, int &err); 129 EXPORT static std::string GetHighlightValue(const std::string &str, const std::string &key); 130 EXPORT static bool GetHighlightTracks(ThumbRdbOpt &opts, std::vector<int> &trackInfos, int32_t &err); 131 132 #ifdef DISTRIBUTED 133 EXPORT static bool QueryDeviceThumbnailRecords(ThumbRdbOpt &opts, std::vector<ThumbnailData> &infos, int &err); 134 #endif 135 EXPORT static bool QueryLcdCountByTime(const int64_t &time, const bool &before, ThumbRdbOpt &opts, int &outLcdCount, 136 int &err); 137 EXPORT static bool ResizeThumb(int& width, int& height); 138 EXPORT static bool ResizeLcd(int& width, int& height); 139 EXPORT static bool IsSupportGenAstc(); 140 EXPORT static void QueryThumbnailDataFromFileId(ThumbRdbOpt &opts, const std::string &id, 141 ThumbnailData &data, int &err); 142 EXPORT static bool CheckDateTaken(ThumbRdbOpt &opts, ThumbnailData &data); 143 EXPORT static void GetThumbnailInfo(ThumbRdbOpt &opts, ThumbnailData &outData); 144 EXPORT static bool ScaleThumbnailFromSource(ThumbnailData &data, bool isSourceEx); 145 EXPORT static bool ScaleTargetPixelMap(std::shared_ptr<PixelMap> &dataSource, const Size &targetSize, 146 const AntiAliasingOption &option); 147 EXPORT static bool CenterScaleEx(std::shared_ptr<PixelMap> &dataSource, const Size &desiredSize, 148 const std::string path); 149 EXPORT static std::string GetThumbnailSuffix(ThumbnailType type); 150 151 EXPORT static void RecordStartGenerateStats(ThumbnailData::GenerateStats &stats, GenerateScene scene, 152 LoadSourceType sourceType); 153 EXPORT static void RecordCostTimeAndReport(ThumbnailData::GenerateStats &stats); 154 155 EXPORT static bool GetLocalThumbSize(const ThumbnailData &data, const ThumbnailType& type, Size& size); 156 EXPORT static void SetThumbnailSizeValue(NativeRdb::ValuesBucket& values, Size& size, const std::string& column); 157 EXPORT static bool LoadVideoFile(ThumbnailData &data, Size &desiredSize); 158 EXPORT static bool CheckCloudThumbnailDownloadFinish(const std::shared_ptr<MediaLibraryRdbStore> rdbStorePtr); 159 EXPORT static bool QueryOldKeyAstcInfos(const std::shared_ptr<MediaLibraryRdbStore> rdbStorePtr, 160 const std::string &table, std::vector<ThumbnailData> &infos); 161 EXPORT static bool CheckRemainSpaceMeetCondition(const int32_t &freeSizePercentLimit); 162 163 private: 164 EXPORT static std::shared_ptr<NativeRdb::ResultSet> QueryThumbnailSet(ThumbRdbOpt &opts); 165 EXPORT static int SaveThumbDataToLocalDir(ThumbnailData &data, const std::string &suffix, 166 uint8_t *output, const int writeSize); 167 EXPORT static int ToSaveFile(ThumbnailData &data, const std::string &fileName, 168 uint8_t *output, const int &writeSize); 169 EXPORT static int SaveFileCreateDir(const std::string &path, const std::string &suffix, std::string &fileName); 170 EXPORT static int SaveFileCreateDirHighlight(const std::string &path, const std::string &suffix, 171 std::string &fileName, const std::string &timeStamp); 172 EXPORT static int32_t SetSource(std::shared_ptr<AVMetadataHelper> avMetadataHelper, const std::string &path); 173 EXPORT static int64_t UTCTimeMilliSeconds(); 174 EXPORT static void ParseQueryResult(const std::shared_ptr<NativeRdb::ResultSet> &resultSet, 175 ThumbnailData &data, int &err, const std::vector<std::string> &column); 176 EXPORT static void ParseStringResult(const std::shared_ptr<NativeRdb::ResultSet> &resultSet, 177 int index, std::string &data, int &err); 178 EXPORT static void ParseHighlightQueryResult(const std::shared_ptr<NativeRdb::ResultSet> &resultSet, 179 ThumbnailData &data, int &err); 180 181 EXPORT static bool CheckResultSetCount(const std::shared_ptr<NativeRdb::ResultSet> &resultSet, int &err); 182 // utils 183 EXPORT static bool LoadImageFile(ThumbnailData &data, Size &desiredSize); 184 EXPORT static bool LoadAudioFileInfo(std::shared_ptr<AVMetadataHelper> avMetadataHelper, ThumbnailData &data, 185 Size &desiredSize, uint32_t &errCode); 186 EXPORT static bool LoadAudioFile(ThumbnailData &data, Size &desiredSize); 187 EXPORT static bool ConvertStrToInt32(const std::string &str, int32_t &ret); 188 EXPORT static bool ParseVideoSize(std::shared_ptr<AVMetadataHelper> &avMetadataHelper, 189 int32_t &videoWidth, int32_t &videoHeight); 190 #ifdef DISTRIBUTED 191 // RDB Store 192 EXPORT static bool GetUdidByNetworkId(ThumbRdbOpt &opts, const std::string &networkId, 193 std::string &outUdid, int &err); 194 EXPORT static bool UpdateRemoteThumbnailInfo(ThumbRdbOpt &opts, ThumbnailData &data, int &err); 195 EXPORT static bool InsertRemoteThumbnailInfo(ThumbRdbOpt &opts, ThumbnailData &data, int &err); 196 EXPORT static bool CleanDistributeLcdInfo(ThumbRdbOpt &opts); 197 #endif 198 199 // scale 200 EXPORT static bool ScaleFastThumb(ThumbnailData &data, const Size &size); 201 202 EXPORT static int SaveAstcDataToKvStore(ThumbnailData &data, const ThumbnailType &type); 203 EXPORT static bool DeleteAstcDataFromKvStore(ThumbRdbOpt &opts, const ThumbnailType &type); 204 EXPORT static bool UpdateAstcDateTakenFromKvStore(ThumbRdbOpt &opts, const ThumbnailData &data); 205 }; 206 } // namespace Media 207 } // namespace OHOS 208 209 #endif // FRAMEWORKS_SERVICES_THUMBNAIL_SERVICE_INCLUDE_THUMBNAIL_UTILS_H_ 210