• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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