• 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 
37 class ThumbnailUtils {
38 public:
39     EXPORT ThumbnailUtils() = delete;
40     EXPORT ~ThumbnailUtils() = delete;
41     // utils
42     EXPORT static bool ResizeImage(const std::vector<uint8_t> &data, const Size &size,
43         std::unique_ptr<PixelMap> &pixelMap);
44     EXPORT static bool CompressImage(const std::shared_ptr<PixelMap> &pixelMap, std::vector<uint8_t> &data,
45         bool isAstc = false, bool forceSdr = true, const ThumbnailQuality quality = ThumbnailQuality::DEFAULT);
46     EXPORT static bool CompressPicture(ThumbnailData &data, const std::shared_ptr<Picture>& picture,
47         const bool isSourceEx, std::string &tempOutputPath);
48     EXPORT static bool CleanThumbnailInfo(ThumbRdbOpt &opts, bool withThumb, bool withLcd = false);
49 
50     // RDB Store Query
51     EXPORT static std::shared_ptr<NativeRdb::ResultSet> QueryThumbnailInfo(ThumbRdbOpt &opts,
52         ThumbnailData &data, int &err);
53 
54     EXPORT static bool DeleteAllThumbFilesAndAstc(ThumbRdbOpt &opts, ThumbnailData &data);
55     EXPORT static bool DeleteThumbnailDirAndAstc(const ThumbRdbOpt &opts, const ThumbnailData &data);
56     EXPORT static bool BatchDeleteThumbnailDirAndAstc(const ThumbRdbOpt &opts, const ThumbnailDataBatch &dataBatch);
57     // Steps
58     EXPORT static bool LoadSourceImage(ThumbnailData &data);
59     EXPORT static bool GenTargetPixelmap(ThumbnailData &data, const Size &desiredSize);
60 
61     EXPORT static bool SaveAfterPacking(ThumbnailData &data, const bool isSourceEx, const std::string &tempOutputPath);
62     EXPORT static void CancelAfterPacking(const std::string &tempOutputPath);
63     EXPORT static int TrySaveFile(ThumbnailData &Data, ThumbnailType type);
64     EXPORT static bool CacheLcdInfo(ThumbRdbOpt &opts, ThumbnailData &data);
65     EXPORT static void CacheInvalidLcdInfo(ThumbnailData &data);
66     EXPORT static bool UpdateHighlightInfo(ThumbRdbOpt &opts, ThumbnailData &data, int &err);
67     EXPORT static bool UpdateLcdReadyStatus(ThumbRdbOpt &opts, ThumbnailData &data, int &err, LcdReady status);
68     EXPORT static bool DoUpdateAstcDateTaken(ThumbRdbOpt &opts, ThumbnailData &data);
69 
70     // RDB Store generate and aging
71     EXPORT static bool QueryLcdCount(ThumbRdbOpt &opts, int &outLcdCount, int &err);
72     EXPORT static bool QueryDistributeLcdCount(ThumbRdbOpt &opts, int &outLcdCount, int &err);
73     EXPORT static bool QueryAgingLcdInfos(ThumbRdbOpt &opts, int LcdLimit,
74         std::vector<ThumbnailData> &infos, int &err);
75     EXPORT static bool QueryNoLcdInfos(ThumbRdbOpt &opts, std::vector<ThumbnailData> &infos, int &err);
76     EXPORT static bool QueryLocalNoLcdInfos(ThumbRdbOpt &opts, std::vector<ThumbnailData> &infos, int &err);
77     EXPORT static bool QueryNoThumbnailInfos(ThumbRdbOpt &opts, std::vector<ThumbnailData> &infos, int &err);
78     EXPORT static bool QueryUpgradeThumbnailInfos(ThumbRdbOpt &opts, std::vector<ThumbnailData> &infos,
79         bool isWifiConnected, int &err);
80     EXPORT static bool QueryNoAstcInfosRestored(ThumbRdbOpt &opts, std::vector<ThumbnailData> &infos, int &err,
81         const int32_t &restoreAstcCount);
82     EXPORT static bool QueryLocalNoThumbnailInfos(ThumbRdbOpt &opts, std::vector<ThumbnailData> &infos, int &err);
83     EXPORT static bool QueryNoAstcInfos(ThumbRdbOpt &opts, std::vector<ThumbnailData> &infos, int &err);
84     EXPORT static bool QueryNewThumbnailCount(ThumbRdbOpt &opts, const int64_t &time, int &count, int &err);
85     EXPORT static bool QueryNoAstcInfosOnDemand(ThumbRdbOpt &opts,
86         std::vector<ThumbnailData> &infos, NativeRdb::RdbPredicates &rdbPredicate, int &err);
87     EXPORT static bool QueryNoHighlightInfos(ThumbRdbOpt &opts, std::vector<ThumbnailData> &infos, int &err);
88     EXPORT static bool QueryNoHighlightPath(ThumbRdbOpt &opts, ThumbnailData &data, int &err);
89     EXPORT static bool QueryHighlightTriggerPath(ThumbRdbOpt &opts, ThumbnailData &data, int &err);
90     EXPORT static std::string GetHighlightValue(const std::string &str, const std::string &key);
91     EXPORT static bool GetHighlightTracks(ThumbRdbOpt &opts, std::vector<int> &trackInfos, int32_t &err);
92     EXPORT static std::string CreateOutputPath(const ThumbnailData &data, const std::string &suffix);
93 
94     EXPORT static bool QueryLcdCountByTime(const int64_t &time, const bool &before, ThumbRdbOpt &opts, int &outLcdCount,
95         int &err);
96     EXPORT static bool ResizeThumb(int& width, int& height);
97     EXPORT static bool ResizeLcd(int& width, int& height);
98     EXPORT static void QueryThumbnailDataFromFileId(ThumbRdbOpt &opts, const std::string &id,
99         ThumbnailData &data, int &err);
100     EXPORT static bool CheckDateTaken(ThumbRdbOpt &opts, ThumbnailData &data);
101     EXPORT static void GetThumbnailInfo(ThumbRdbOpt &opts, ThumbnailData &outData);
102     EXPORT static bool ScaleThumbnailFromSource(ThumbnailData &data, const bool isSourceEx);
103     EXPORT static bool ScaleTargetPixelMap(std::shared_ptr<PixelMap> &dataSource, const Size &targetSize,
104         const AntiAliasingOption &option);
105     EXPORT static bool CenterScaleEx(std::shared_ptr<PixelMap> &dataSource, const Size &desiredSize,
106         const std::string path);
107 
108     EXPORT static void RecordStartGenerateStats(ThumbnailData::GenerateStats &stats, GenerateScene scene,
109         LoadSourceType sourceType);
110     EXPORT static void RecordCostTimeAndReport(ThumbnailData::GenerateStats &stats);
111 
112     EXPORT static bool GetLocalThumbSize(const ThumbnailData &data, const ThumbnailType& type, Size& size);
113     EXPORT static void SetThumbnailSizeValue(NativeRdb::ValuesBucket& values, Size& size, const std::string& column);
114     EXPORT static bool LoadVideoFrame(ThumbnailData &data, Size &desiredSize, int64_t timeStamp);
115     EXPORT static bool CheckCloudThumbnailDownloadFinish(const std::shared_ptr<MediaLibraryRdbStore> rdbStorePtr);
116     EXPORT static bool QueryOldKeyAstcInfos(const std::shared_ptr<MediaLibraryRdbStore> rdbStorePtr,
117         const std::string &table, std::vector<ThumbnailData> &infos);
118     EXPORT static void StoreThumbnailSize(const ThumbRdbOpt& opts, const ThumbnailData& data);
119     EXPORT static void DropThumbnailSize(const ThumbRdbOpt& opts, const ThumbnailData& data);
120     EXPORT static void BatchDropThumbnailSize(const ThumbnailDataBatch& dataBatch);
121     EXPORT static bool IsExCloudThumbnail(const ThumbnailData &data);
122     EXPORT static void HandleImageExifRotate(ThumbnailData &data);
123     EXPORT static bool NeedRotateThumbnail(const ThumbnailData &data);
124     EXPORT static bool IsImageWithExifRotate(const ThumbnailData &data);
125     EXPORT static bool IsUseRotatedSource(const ThumbnailData &data);
126     EXPORT static void PostProcPixelMapSource(ThumbnailData &data);
127     EXPORT static void PostProcPictureSource(ThumbnailData &data);
128 
129 private:
130     EXPORT static std::shared_ptr<NativeRdb::ResultSet> QueryThumbnailSet(ThumbRdbOpt &opts);
131     EXPORT static int SaveThumbDataToLocalDir(ThumbnailData &data, const std::string &suffix,
132         uint8_t *output, const int writeSize);
133     EXPORT static int ToSaveFile(ThumbnailData &data, const std::string &fileName,
134         uint8_t *output, const int &writeSize);
135     EXPORT static int SaveFileCreateDir(const std::string &path, const std::string &suffix, std::string &fileName);
136     EXPORT static int SaveFileCreateDirHighlight(const std::string &path, const std::string &suffix,
137         std::string &fileName, const std::string &timeStamp);
138     EXPORT static int32_t SetSource(std::shared_ptr<AVMetadataHelper> avMetadataHelper, const std::string &path);
139     EXPORT static int64_t UTCTimeMilliSeconds();
140     EXPORT static void ParseHighlightQueryResult(const std::shared_ptr<NativeRdb::ResultSet> &resultSet,
141        ThumbnailData &data, int &err);
142 
143     // utils
144     EXPORT static bool LoadImageFile(ThumbnailData &data, Size &desiredSize);
145     EXPORT static bool LoadAudioFileInfo(std::shared_ptr<AVMetadataHelper> avMetadataHelper, ThumbnailData &data,
146         Size &desiredSize, uint32_t &errCode);
147     EXPORT static bool LoadAudioFile(ThumbnailData &data, Size &desiredSize);
148     EXPORT static bool ConvertStrToInt32(const std::string &str, int32_t &ret);
149     EXPORT static bool ParseVideoSize(std::shared_ptr<AVMetadataHelper> &avMetadataHelper,
150         int32_t &videoWidth, int32_t &videoHeight);
151 
152     // scale
153     EXPORT static bool ScaleFastThumb(ThumbnailData &data, const Size &size);
154 
155     EXPORT static int SaveAstcDataToKvStore(ThumbnailData &data, const ThumbnailType &type);
156     EXPORT static bool UpdateAstcDateTakenFromKvStore(ThumbRdbOpt &opts, const ThumbnailData &data);
157 };
158 } // namespace Media
159 } // namespace OHOS
160 
161 #endif // FRAMEWORKS_SERVICES_THUMBNAIL_SERVICE_INCLUDE_THUMBNAIL_UTILS_H_
162