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