• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022-2024 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_ITHUMBNAIL_HELPER_H_
17 #define FRAMEWORKS_SERVICES_THUMBNAIL_SERVICE_INCLUDE_ITHUMBNAIL_HELPER_H_
18 
19 #include <map>
20 #include <memory>
21 #include <shared_mutex>
22 
23 #include "ability_connect_callback_stub.h"
24 #include "fa_ability_context.h"
25 #include "datashare_proxy.h"
26 #include "datashare_values_bucket.h"
27 #include "result_set_bridge.h"
28 #include "thumbnail_const.h"
29 #include "thumbnail_generate_worker.h"
30 #include "thumbnail_utils.h"
31 #include "pixel_map.h"
32 
33 namespace OHOS {
34 namespace Media {
35 enum WaitStatus {
36     INSERT,
37     WAIT_SUCCESS,
38     WAIT_CONTINUE,
39     WAIT_FAILED,
40     TIMEOUT,
41 };
42 
43 enum CloudLoadType {
44     NONE,
45     CLOUD_READ_THUMB,
46     CLOUD_READ_LCD,
47     CLOUD_DOWNLOAD,
48 };
49 
50 enum CloudReadStatus {
51     START,
52     SUCCESS,
53     FAIL,
54 };
55 
56 class ThumbnailSyncStatus {
57 public:
58     bool CheckSavedFileMap(const std::string &id, ThumbnailType type, const std::string &dateModified);
59     EXPORT bool UpdateSavedFileMap(const std::string &id, ThumbnailType type, const std::string &dateModified);
60     std::condition_variable cond_;
61     std::mutex mtx_;
62     bool isSyncComplete_{false};
63     bool isCreateThumbnailSuccess_{false};
64     std::string latestDateModified_{"0"};
65     std::map<std::string, std::string> latestSavedFileMap_;
66     std::atomic<CloudReadStatus> CloudLoadThumbnailStatus_{START};
67     std::atomic<CloudReadStatus> CloudLoadLcdStatus_{START};
68     std::atomic<CloudLoadType> cloudLoadType_{NONE};
69 };
70 
71 using ThumbnailMap = std::map<std::string, std::shared_ptr<ThumbnailSyncStatus>>;
72 class ThumbnailWait {
73 public:
74     EXPORT ThumbnailWait(bool release);
75     EXPORT ~ThumbnailWait();
76 
77     WaitStatus InsertAndWait(const std::string &id, ThumbnailType type, const std::string &dateModified);
78     WaitStatus CloudInsertAndWait(const std::string &id, CloudLoadType cloudLoadType);
79     void CheckAndWait(const std::string &id, bool isLcd);
80     void UpdateThumbnailMap();
81     void UpdateCloudLoadThumbnailMap(CloudLoadType cloudLoadType, bool isLoadSuccess);
82 
83     EXPORT bool TrySaveCurrentPixelMap(ThumbnailData &data, ThumbnailType type);
84     EXPORT bool TrySaveCurrentPicture(ThumbnailData &data, const bool isSourceEx, const std::string &tempOutputPath);
85 
86 private:
87     void Notify();
88     std::string id_;
89     std::string dateModified_;
90     bool needRelease_{false};
91     static ThumbnailMap thumbnailMap_;
92     static std::shared_mutex mutex_;
93 };
94 
95 class IThumbnailHelper {
96 public:
97     IThumbnailHelper() = default;
98     virtual ~IThumbnailHelper() = default;
99     EXPORT static void CreateLcdAndThumbnail(std::shared_ptr<ThumbnailTaskData> &data);
100     EXPORT static bool DoCreateLcdAndThumbnail(ThumbRdbOpt &opts, ThumbnailData &data);
101     EXPORT static void CreateLcd(std::shared_ptr<ThumbnailTaskData> &data);
102     EXPORT static void CreateThumbnail(std::shared_ptr<ThumbnailTaskData> &data);
103     EXPORT static void CreateAstc(std::shared_ptr<ThumbnailTaskData> &data);
104     EXPORT static void CreateAstcEx(std::shared_ptr<ThumbnailTaskData> &data);
105     EXPORT static void CloudSyncOnGenerationComplete(std::shared_ptr<ThumbnailTaskData> &data);
106     EXPORT static void AddThumbnailGenerateTask(ThumbnailGenerateExecute executor,
107         const ThumbnailTaskType &taskType, const ThumbnailTaskPriority &priority);
108     EXPORT static void AddThumbnailGenerateTask(ThumbnailGenerateExecute executor, ThumbRdbOpt &opts,
109         ThumbnailData &thumbData, const ThumbnailTaskType &taskType, const ThumbnailTaskPriority &priority,
110         std::shared_ptr<ExecuteParamBuilder> param = nullptr);
111     EXPORT static void AddThumbnailGenBatchTask(ThumbnailGenerateExecute executor,
112         ThumbRdbOpt &opts, ThumbnailData &thumbData, int32_t requestId = 0);
113     EXPORT static std::unique_ptr<PixelMap> GetPixelMap(const std::vector<uint8_t> &image, Size &size);
114     EXPORT static bool DoCreateLcd(ThumbRdbOpt &opts, ThumbnailData &data);
115     EXPORT static bool DoCreateThumbnail(ThumbRdbOpt &opts, ThumbnailData &data);
116     EXPORT static bool DoCreateAstc(ThumbRdbOpt &opts, ThumbnailData &data);
117     EXPORT static bool DoCreateAstcEx(ThumbRdbOpt &opts, ThumbnailData &data);
118     EXPORT static bool DoCreateAstcMthAndYear(ThumbRdbOpt &opts, ThumbnailData &data);
119     EXPORT static bool DoRotateThumbnail(ThumbRdbOpt &opts, ThumbnailData &data);
120     EXPORT static bool DoRotateThumbnailEx(ThumbRdbOpt &opts, ThumbnailData &data, int32_t fd, ThumbnailType thumbType);
121     EXPORT static bool IsPureCloudImage(ThumbRdbOpt &opts);
122     EXPORT static void DeleteMonthAndYearAstc(std::shared_ptr<ThumbnailTaskData> &data);
123     EXPORT static void UpdateAstcDateTaken(std::shared_ptr<ThumbnailTaskData> &data);
124     EXPORT static bool CacheThumbnailState(const ThumbRdbOpt &opts, ThumbnailData &data, const bool isSuccess);
125     EXPORT static void UpdateHighlightDbState(ThumbRdbOpt &opts, ThumbnailData &data);
126 private:
127     EXPORT static bool TrySavePixelMap(ThumbnailData &data, ThumbnailType type);
128     EXPORT static bool TrySavePicture(ThumbnailData &data, const bool isSourceEx, const std::string &tempOutputPath);
129     EXPORT static bool SaveLcdPixelMapSource(ThumbRdbOpt &opts, ThumbnailData &data, const bool isSourceEx);
130     EXPORT static bool SaveLcdPictureSource(ThumbRdbOpt &opts, ThumbnailData &data, const bool isSourceEx);
131     EXPORT static bool GenThumbnail(ThumbRdbOpt &opts, ThumbnailData &data, const ThumbnailType type);
132     EXPORT static bool GenThumbnailEx(ThumbRdbOpt &opts, ThumbnailData &data);
133     EXPORT static bool TryLoadSource(ThumbRdbOpt &opts, ThumbnailData &data);
134     EXPORT static bool GenMonthAndYearAstcData(ThumbnailData &data, const ThumbnailType type);
135     EXPORT static bool CacheSuccessState(const ThumbRdbOpt &opts, ThumbnailData &data);
136     EXPORT static bool CacheFailState(const ThumbRdbOpt &opts, ThumbnailData &data);
137     EXPORT static int32_t CacheThumbDbState(const ThumbRdbOpt &opts, ThumbnailData &data);
138     EXPORT static int32_t CacheDirtyState(const ThumbRdbOpt &opts, ThumbnailData &data);
139     EXPORT static bool IsCreateThumbnailSuccess(ThumbRdbOpt &opts, ThumbnailData &data);
140     EXPORT static bool IsCreateThumbnailExSuccess(ThumbRdbOpt &opts, ThumbnailData &data);
141     EXPORT static bool IsCreateLcdSuccess(ThumbRdbOpt &opts, ThumbnailData &data);
142     EXPORT static bool IsCreateLcdExSuccess(ThumbRdbOpt &opts, ThumbnailData &data);
143     EXPORT static bool StorePicture(ThumbnailData &data,
144         const std::shared_ptr<Picture>& picture, const bool isSourceEx);
145     EXPORT static Size GetLcdDesiredSize(const ThumbnailData& data, const bool isSourceEx);
146     // sizeLimit unit: Byte
147     EXPORT static bool StorePictureLowQuality(ThumbnailData &data,
148         const std::shared_ptr<Picture>& picture, const bool isSourceEx, const size_t sizeLimit);
149     EXPORT static bool StoreLcdPixelMapLowQuality(ThumbnailData& data,
150         const std::shared_ptr<PixelMap>& pixelMap, const bool isSourceEx, const size_t sizeLimit);
151 };
152 } // namespace Media
153 } // namespace OHOS
154 
155 #endif  // FRAMEWORKS_SERVICES_THUMBNAIL_SERVICE_INCLUDE_ITHUMBNAIL_HELPER_H_
156