• 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 "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 "single_kvstore.h"
28 #include "thumbnail_const.h"
29 
30 namespace OHOS {
31 namespace Media {
32 #define EXPORT __attribute__ ((visibility ("default")))
33 struct ThumbRdbOpt {
34     EXPORT std::shared_ptr<NativeRdb::RdbStore> store;
35 #ifdef DISTRIBUTED
36     EXPORT std::shared_ptr<DistributedKv::SingleKvStore> kvStore;
37 #endif
38     EXPORT std::shared_ptr<AbilityRuntime::Context> context;
39     EXPORT std::string networkId;
40     EXPORT std::string path;
41     EXPORT std::string table;
42     EXPORT std::string udid;
43     EXPORT std::string row;
44     EXPORT std::string uri;
45     EXPORT std::string dateAdded;
46     EXPORT std::string fileUri;
47     EXPORT Size screenSize;
48 };
49 
50 struct ThumbnailData {
ThumbnailDataThumbnailData51     EXPORT ThumbnailData() {}
~ThumbnailDataThumbnailData52     EXPORT virtual ~ThumbnailData()
53     {
54         source = nullptr;
55         thumbnail.clear();
56         lcd.clear();
57         monthAstc.clear();
58         yearAstc.clear();
59     }
60 
61     EXPORT int mediaType {-1};
62     EXPORT int64_t dateModified {0};
63     EXPORT float degrees;
64     EXPORT bool isThumbAdded {false};
65     EXPORT std::shared_ptr<PixelMap> source;
66     EXPORT std::vector<uint8_t> thumbnail;
67     EXPORT std::vector<uint8_t> thumbAstc;
68     EXPORT std::vector<uint8_t> monthAstc;
69     EXPORT std::vector<uint8_t> yearAstc;
70     EXPORT std::vector<uint8_t> lcd;
71     EXPORT std::string dateAdded;
72     EXPORT std::string displayName;
73     EXPORT std::string fileUri;
74     EXPORT std::string id;
75     EXPORT std::string cloudId;
76     EXPORT std::string udid;
77     EXPORT std::string path;
78     EXPORT std::string thumbnailKey;
79     EXPORT std::string lcdKey;
80 };
81 
82 class ThumbnailUtils {
83 public:
84     EXPORT ThumbnailUtils() = delete;
85     EXPORT ~ThumbnailUtils() = delete;
86     // utils
87     EXPORT static bool ResizeImage(const std::vector<uint8_t> &data, const Size &size,
88         std::unique_ptr<PixelMap> &pixelMap);
89     EXPORT static bool CompressImage(std::shared_ptr<PixelMap> &pixelMap, std::vector<uint8_t> &data,
90         bool isHigh = false, std::shared_ptr<std::string> pathPtr = nullptr, bool isAstc = false);
91     EXPORT static bool CleanThumbnailInfo(ThumbRdbOpt &opts, bool withThumb, bool withLcd = false);
92 
93     // RDB Store Query
94     EXPORT static std::shared_ptr<NativeRdb::ResultSet> QueryThumbnailInfo(ThumbRdbOpt &opts,
95         ThumbnailData &data, int &err);
96 #ifdef DISTRIBUTED
97     static bool QueryRemoteThumbnail(ThumbRdbOpt &opts, ThumbnailData &data, int &err);
98     // KV Store
99     static bool RemoveDataFromKv(const std::shared_ptr<DistributedKv::SingleKvStore> &kvStore, const std::string &key);
100     static bool IsImageExist(const std::string &key, const std::string &networkId,
101         const std::shared_ptr<DistributedKv::SingleKvStore> &kvStore);
102     static bool DeleteDistributeLcdData(ThumbRdbOpt &opts, ThumbnailData &thumbnailData);
103 #endif
104     static bool DeleteThumbFile(ThumbnailData &data, ThumbnailType type);
105 #ifdef DISTRIBUTED
106     static bool DeleteDistributeThumbnailInfo(ThumbRdbOpt &opts);
107 #endif
108 
109     EXPORT static bool DeleteOriginImage(ThumbRdbOpt &opts);
110     // Steps
111     EXPORT static bool LoadSourceImage(ThumbnailData &data, const bool isThumbnail = true,
112         const std::string &targetPath = "");
113     static bool GenTargetPixelmap(ThumbnailData &data, const Size &desiredSize);
114 
115     static int TrySaveFile(ThumbnailData &Data, ThumbnailType type);
116     EXPORT static bool UpdateLcdInfo(ThumbRdbOpt &opts, ThumbnailData &data, int &err);
117     EXPORT static bool UpdateVisitTime(ThumbRdbOpt &opts, ThumbnailData &data, int &err);
118 #ifdef DISTRIBUTED
119     static bool DoUpdateRemoteThumbnail(ThumbRdbOpt &opts, ThumbnailData &data, int &err);
120 #endif
121 
122     // RDB Store generate and aging
123     EXPORT static bool QueryLcdCount(ThumbRdbOpt &opts, int &outLcdCount, int &err);
124     EXPORT static bool QueryDistributeLcdCount(ThumbRdbOpt &opts, int &outLcdCount, int &err);
125     EXPORT static bool QueryAgingLcdInfos(ThumbRdbOpt &opts, int LcdLimit,
126         std::vector<ThumbnailData> &infos, int &err);
127 #ifdef DISTRIBUTED
128     static bool QueryAgingDistributeLcdInfos(ThumbRdbOpt &opts, int LcdLimit,
129         std::vector<ThumbnailData> &infos, int &err);
130 #endif
131     EXPORT static bool QueryNoLcdInfos(ThumbRdbOpt &opts, int LcdLimit, std::vector<ThumbnailData> &infos, int &err);
132     EXPORT static bool QueryNoThumbnailInfos(ThumbRdbOpt &opts, std::vector<ThumbnailData> &infos, int &err);
133     static bool QueryNoAstcInfos(ThumbRdbOpt &opts, std::vector<ThumbnailData> &infos, int &err);
134     static bool QueryNewThumbnailCount(ThumbRdbOpt &opts, const int64_t &time, int &count, int &err);
135 #ifdef DISTRIBUTED
136     static bool QueryDeviceThumbnailRecords(ThumbRdbOpt &opts, std::vector<ThumbnailData> &infos, int &err);
137 #endif
138     static bool QueryLcdCountByTime(const int64_t &time, const bool &before, ThumbRdbOpt &opts, int &outLcdCount,
139         int &err);
140     EXPORT static bool ResizeThumb(int& width, int& height);
141     EXPORT static bool ResizeLcd(int& width, int& height);
142     static bool IsSupportGenAstc();
143     EXPORT static void QueryThumbnailDataFromFileId(ThumbRdbOpt &opts, const std::string &id,
144         ThumbnailData &data, int &err);
145     static bool CheckDateAdded(ThumbRdbOpt &opts, ThumbnailData &data);
146 
147 private:
148     EXPORT static std::shared_ptr<NativeRdb::ResultSet> QueryThumbnailSet(ThumbRdbOpt &opts);
149     static int SaveThumbDataToLocalDir(ThumbnailData &data,
150         const ThumbnailType &type, const std::string &suffix, uint8_t *output, const int writeSize);
151     static int ToSaveFile(ThumbnailData &data, const ThumbnailType &type, const std::string &fileName,
152         uint8_t *output, const int &writeSize);
153     static int SaveFileCreateDir(const std::string &path, const std::string &suffix, std::string &fileName);
154     EXPORT static int32_t SetSource(std::shared_ptr<AVMetadataHelper> avMetadataHelper, const std::string &path);
155     EXPORT static int64_t UTCTimeMilliSeconds();
156     EXPORT static void ParseQueryResult(const std::shared_ptr<NativeRdb::ResultSet> &resultSet,
157         ThumbnailData &data, int &err);
158     EXPORT static void ParseStringResult(const std::shared_ptr<NativeRdb::ResultSet> &resultSet,
159         int index, std::string &data, int &err);
160 
161     EXPORT static bool CheckResultSetCount(const std::shared_ptr<NativeRdb::ResultSet> &resultSet, int &err);
162     // utils
163     static Size ConvertDecodeSize(const Size &sourceSize, Size &desiredSize, const bool isThumbnail);
164     EXPORT static bool ScaleTargetPixelMap(ThumbnailData &data, const Size &targetSize);
165     EXPORT static bool LoadImageFile(ThumbnailData &data, const bool isThumbnail, Size &desiredSize,
166         const std::string &targetPath);
167     EXPORT static bool LoadVideoFile(ThumbnailData &data, const bool isThumbnail, Size &desiredSize);
168     static bool LoadAudioFileInfo(std::shared_ptr<AVMetadataHelper> avMetadataHelper, ThumbnailData &data,
169         const bool isThumbnail, Size &desiredSize, uint32_t &errCode);
170     EXPORT static bool LoadAudioFile(ThumbnailData &data, const bool isThumbnail, Size &desiredSize);
171 
172 #ifdef DISTRIBUTED
173     // RDB Store
174     static bool GetUdidByNetworkId(ThumbRdbOpt &opts, const std::string &networkId,
175         std::string &outUdid, int &err);
176     static bool UpdateRemoteThumbnailInfo(ThumbRdbOpt &opts, ThumbnailData &data, int &err);
177     static bool InsertRemoteThumbnailInfo(ThumbRdbOpt &opts, ThumbnailData &data, int &err);
178     static bool CleanDistributeLcdInfo(ThumbRdbOpt &opts);
179 #endif
180 
181     // scale
182     static bool ScaleFastThumb(ThumbnailData &data, const Size &size);
183 
184     static int SaveAstcDataToKvStore(ThumbnailData &data, const ThumbnailType &type);
185     static bool GenerateKvStoreKey(const std::string &fieldId, const std::string &dateAdded, std::string &key);
186 };
187 } // namespace Media
188 } // namespace OHOS
189 
190 #endif // FRAMEWORKS_SERVICES_THUMBNAIL_SERVICE_INCLUDE_THUMBNAIL_UTILS_H_
191