diff --git a/frameworks/ani/ets/@ohos.file.photoAccessHelper.ets b/frameworks/ani/ets/@ohos.file.photoAccessHelper.ets index 9e59ef1f30cc3350b248317683fdc71838310057..ada7d747618e68f256db8c864134d6e658620248 100644 --- a/frameworks/ani/ets/@ohos.file.photoAccessHelper.ets +++ b/frameworks/ani/ets/@ohos.file.photoAccessHelper.ets @@ -68,6 +68,15 @@ export namespace photoAccessHelper { HDR = 1 } + export enum HdrMode { + DEFAULT = 0, + HDR_ISO_SINGLE = 1, + HDR_ISO_DUAL = 2, + HDR_CUVA = 3, + HDR_VIVID_SINGLE = 4, + HDR_VIVID_DUAL = 5, + } + export enum PositionType { LOCAL = 1 << 0, CLOUD = 1 << 1 @@ -571,6 +580,7 @@ export namespace photoAccessHelper { PHOTO_SUBTYPE = 'subtype', MOVING_PHOTO_EFFECT_MODE = 'moving_photo_effect_mode', DYNAMIC_RANGE_TYPE = 'dynamic_range_type', + HDR_MODE = 'hdr_mode', COVER_POSITION = 'cover_position', BURST_KEY = 'burst_key', THUMBNAIL_READY = 'thumbnail_ready', @@ -1463,6 +1473,7 @@ export namespace photoAccessHelper { subtype: PhotoSubtype; movingPhotoEffectMode: MovingPhotoEffectMode; dynamicRangeType: DynamicRangeType; + hdrMode: HdrMode; thumbnailReady: boolean; lcdSize: string; thmSize: string; diff --git a/frameworks/ani/src/cpp/media_library_enum_ani.cpp b/frameworks/ani/src/cpp/media_library_enum_ani.cpp index e8a094ce1216b9f6f1ed16053e0e7e77b0c220fb..384a8780af429df121b30ba3c8740b37e9350eb3 100644 --- a/frameworks/ani/src/cpp/media_library_enum_ani.cpp +++ b/frameworks/ani/src/cpp/media_library_enum_ani.cpp @@ -37,6 +37,15 @@ static const std::map ANI_DYNAMICRANGETYPE_INDEX_MAP {DynamicRangeType::HDR, 1}, }; +static const std::map ANI_HDRMODE_INDEX_MAP = { + {HdrMode::DEFAULT, 0}, + {HdrMode::HDR_ISO_SINGLE, 1}, + {HdrMode::HDR_ISO_DUAL, 2}, + {HdrMode::HDR_CUVA, 3}, + {HdrMode::HDR_VIVID_SINGLE, 4}, + {HdrMode::HDR_VIVID_DUAL, 5}, +}; + static const std::map ANI_PHOTOPOSITIONTYPE_INDEX_MAP = { {PhotoPositionType::LOCAL, 0}, {PhotoPositionType::CLOUD, 1}, @@ -160,6 +169,20 @@ ani_status MediaLibraryEnumAni::ToAniEnum(ani_env *env, DynamicRangeType value, return ANI_OK; } +ani_status MediaLibraryEnumAni::ToAniEnum(ani_env *env, HdrMode value, ani_enum_item &aniEnumItem) +{ + CHECK_COND_RET(env != nullptr, ANI_INVALID_ARGS, "Invalid env"); + + auto it = ANI_HDRMODE_INDEX_MAP.find(value); + CHECK_COND_RET(it != ANI_HDRMODE_INDEX_MAP.end(), ANI_INVALID_ARGS, "Unsupport enum: %{public}d", value); + ani_int enumIndex = static_cast(it->second); + + ani_enum aniEnum {}; + CHECK_STATUS_RET(env->FindEnum(ANI_CLASS_ENUM_HDR_MODE.c_str(), &aniEnum), "Find Enum Fail"); + CHECK_STATUS_RET(env->Enum_GetEnumItemByIndex(aniEnum, enumIndex, &aniEnumItem), "Find Enum item Fail"); + return ANI_OK; +} + ani_status MediaLibraryEnumAni::ToAniEnum(ani_env *env, PhotoPositionType value, ani_enum_item &aniEnumItem) { CHECK_COND_RET(env != nullptr, ANI_INVALID_ARGS, "Invalid env"); diff --git a/frameworks/ani/src/include/ani_class_name.h b/frameworks/ani/src/include/ani_class_name.h index 0a4360a1613baedcb8618ff87ff71d1804ea9d7a..0ea3995923bcc88bfb5b0fe959761fa35fd3892e 100644 --- a/frameworks/ani/src/include/ani_class_name.h +++ b/frameworks/ani/src/include/ani_class_name.h @@ -43,6 +43,7 @@ static const std::string ANI_CLASS_MEDIA_ASSETS_CHANGE_REQUEST = static const std::string ANI_CLASS_ENUM_PHOTO_TYPE = PHOTO_ACCESS_HELPER_CLASS_SPACE + "PhotoType;"; static const std::string ANI_CLASS_ENUM_PHOTO_SUBTYPE = PHOTO_ACCESS_HELPER_CLASS_SPACE + "PhotoSubtype;"; static const std::string ANI_CLASS_ENUM_DYNAMIC_RANGE_TYPE = PHOTO_ACCESS_HELPER_CLASS_SPACE + "DynamicRangeType;"; +static const std::string ANI_CLASS_ENUM_HDR_MODE = PHOTO_ACCESS_HELPER_CLASS_SPACE + "HdrMode;"; static const std::string ANI_CLASS_ENUM_POSITION_TYPE = PHOTO_ACCESS_HELPER_CLASS_SPACE + "PositionType;"; static const std::string ANI_CLASS_ENUM_ALBUM_TYPE = PHOTO_ACCESS_HELPER_CLASS_SPACE + "AlbumType;"; static const std::string ANI_CLASS_ENUM_ALBUM_SUBTYPE = PHOTO_ACCESS_HELPER_CLASS_SPACE + "AlbumSubtype;"; diff --git a/frameworks/ani/src/include/media_library_enum_ani.h b/frameworks/ani/src/include/media_library_enum_ani.h index 7f41666c86b828592471fdaa9290a2bcd2f937fd..86530e3ffc917745c41f8d5abcb7240ec113c623 100644 --- a/frameworks/ani/src/include/media_library_enum_ani.h +++ b/frameworks/ani/src/include/media_library_enum_ani.h @@ -32,6 +32,7 @@ public: static ani_status ToAniEnum(ani_env *env, MediaType value, ani_enum_item &aniEnumItem); static ani_status ToAniEnum(ani_env *env, PhotoSubType value, ani_enum_item &aniEnumItem); static ani_status ToAniEnum(ani_env *env, DynamicRangeType value, ani_enum_item &aniEnumItem); + static ani_status ToAniEnum(ani_env *env, HdrMode value, ani_enum_item &aniEnumItem); static ani_status ToAniEnum(ani_env *env, PhotoPositionType value, ani_enum_item &aniEnumItem); static ani_status ToAniEnum(ani_env *env, PhotoAlbumType value, ani_enum_item &aniEnumItem); static ani_status ToAniEnum(ani_env *env, PhotoAlbumSubType value, ani_enum_item &aniEnumItem); diff --git a/frameworks/ani/src/include/medialibrary_ani_enum_comm.h b/frameworks/ani/src/include/medialibrary_ani_enum_comm.h index 10269ab42dcca60167e69e70d5a9e70c243aa908..6bd3b42c9acc3045bdb6d4e79fe9bb9bfeffb4bf 100644 --- a/frameworks/ani/src/include/medialibrary_ani_enum_comm.h +++ b/frameworks/ani/src/include/medialibrary_ani_enum_comm.h @@ -117,6 +117,10 @@ const std::vector dynamicRangeTypeEnum { "SDR", "HDR" }; +const std::vector hdrModeEnum { + "DEFAULT", "HDR_ISO_SINGLE", "HDR_ISO_DUAL", "HDR_CUVA", "HDR_VIVID_SINGLE", "HDR_VIVID_DUAL" +}; + const std::vector movingPhotoEffectModeEnum { "DEFAULT", "BOUNCE_PLAY", "LOOP_PLAY", "LONG_EXPOSURE", "MULTI_EXPOSURE", "CINEMA_GRAPH" }; @@ -221,6 +225,7 @@ const std::vector> IMAGEVIDEOKEY_ENUM_PROPER std::make_pair("DATE_TRASHED_MS", MEDIA_DATA_DB_DATE_TRASHED_MS), std::make_pair("PHOTO_SUBTYPE", PhotoColumn::PHOTO_SUBTYPE), std::make_pair("DYNAMIC_RANGE_TYPE", PhotoColumn::PHOTO_DYNAMIC_RANGE_TYPE), + std::make_pair("HDR_MODE", PhotoColumn::PHOTO_HDR_MODE), std::make_pair("LCD_SIZE", PhotoColumn::PHOTO_LCD_SIZE), std::make_pair("THM_SIZE", PhotoColumn::PHOTO_THUMB_SIZE), std::make_pair("MOVING_PHOTO_EFFECT_MODE", PhotoColumn::MOVING_PHOTO_EFFECT_MODE), @@ -298,6 +303,7 @@ const std::vector PHOTO_COLUMN = { PhotoColumn::PHOTO_SUBTYPE, PhotoColumn::MOVING_PHOTO_EFFECT_MODE, PhotoColumn::PHOTO_DYNAMIC_RANGE_TYPE, + PhotoColumn::PHOTO_HDR_MODE, PhotoColumn::PHOTO_THUMBNAIL_READY, PhotoColumn::PHOTO_LCD_SIZE, PhotoColumn::PHOTO_THUMB_SIZE, diff --git a/frameworks/ani/src/include/medialibrary_ani_utils.h b/frameworks/ani/src/include/medialibrary_ani_utils.h index 6390c0b07032cbc1b8379b2528b9e37749ebbdd2..995353a074775fc8ab1f9a5f3c0de0f10c9472fd 100644 --- a/frameworks/ani/src/include/medialibrary_ani_utils.h +++ b/frameworks/ani/src/include/medialibrary_ani_utils.h @@ -190,6 +190,7 @@ public: {PhotoColumn::PHOTO_SUBTYPE, {TYPE_INT32, "subtype"}}, {PhotoColumn::MOVING_PHOTO_EFFECT_MODE, {TYPE_INT32, "movingPhotoEffectMode"}}, {PhotoColumn::PHOTO_DYNAMIC_RANGE_TYPE, {TYPE_INT32, "dynamicRangeType"}}, + {PhotoColumn::PHOTO_HDR_MODE, {TYPE_INT32, "hdrMode"}}, {PhotoColumn::PHOTO_THUMBNAIL_READY, {TYPE_INT64, "thumbnailModifiedMs"}}, {PhotoColumn::PHOTO_LCD_SIZE, {TYPE_STRING, "lcdSize"}}, {PhotoColumn::PHOTO_THUMB_SIZE, {TYPE_STRING, "thmSize"}}, diff --git a/frameworks/innerkitsimpl/media_library_cloud_sync/include/mdk_record_photos_data.h b/frameworks/innerkitsimpl/media_library_cloud_sync/include/mdk_record_photos_data.h index b5cf6d8382f23db2c37c96b37261dade9e490488..6cfaabde6b0b1b294c16fb3f40eef5a97410d88f 100644 --- a/frameworks/innerkitsimpl/media_library_cloud_sync/include/mdk_record_photos_data.h +++ b/frameworks/innerkitsimpl/media_library_cloud_sync/include/mdk_record_photos_data.h @@ -125,6 +125,8 @@ public: // attributes getter & setter MDKRecordPhotosData &SetShootingModeTag(const std::string &shootingModeTag); std::optional GetDynamicRangeType() const; MDKRecordPhotosData &SetDynamicRangeType(const int32_t dynamicRangeType); + std::optional GetHdrMode() const; + MDKRecordPhotosData &SetHdrMode(const int32_t hdrMode); std::optional GetFrontCamera() const; MDKRecordPhotosData &SetFrontCamera(const std::string &frontCamera); std::optional GetEditTime() const; diff --git a/frameworks/innerkitsimpl/media_library_cloud_sync/src/cloud_sync_data_convert/cloud_file_data_convert.cpp b/frameworks/innerkitsimpl/media_library_cloud_sync/src/cloud_sync_data_convert/cloud_file_data_convert.cpp index a86d6ac09245a78366c4147babec15c09e748ee2..a9627efdb0e3752693147620666fb00f2942a79d 100644 --- a/frameworks/innerkitsimpl/media_library_cloud_sync/src/cloud_sync_data_convert/cloud_file_data_convert.cpp +++ b/frameworks/innerkitsimpl/media_library_cloud_sync/src/cloud_sync_data_convert/cloud_file_data_convert.cpp @@ -208,6 +208,7 @@ int32_t CloudFileDataConvert::HandleUniqueFileds( map[PhotoColumn::PHOTO_SHOOTING_MODE] = MDKRecordField(upLoadRecord.shootingMode); map[PhotoColumn::PHOTO_SHOOTING_MODE_TAG] = MDKRecordField(upLoadRecord.shootingModeTag); map[PhotoColumn::PHOTO_DYNAMIC_RANGE_TYPE] = MDKRecordField(upLoadRecord.dynamicRangeType); + map[PhotoColumn::PHOTO_HDR_MODE] = MDKRecordField(upLoadRecord.hdrMode); map[PhotoColumn::PHOTO_FRONT_CAMERA] = MDKRecordField(upLoadRecord.frontCamera); map[PhotoColumn::PHOTO_EDIT_TIME] = MDKRecordField(upLoadRecord.editTime); map[PhotoColumn::PHOTO_ORIGINAL_SUBTYPE] = MDKRecordField(upLoadRecord.originalSubtype); @@ -983,6 +984,7 @@ void CloudFileDataConvert::ConvertAttributes(MDKRecordPhotosData &data, OnFetchP onFetchPhotoVo.subtype = data.GetSubType().value_or(0); onFetchPhotoVo.originalSubtype = data.GetOriginalSubType().value_or(0); onFetchPhotoVo.dynamicRangeType = data.GetDynamicRangeType().value_or(0); + onFetchPhotoVo.hdrMode = data.GetHdrMode().value_or(0); onFetchPhotoVo.movingPhotoEffectMode = data.GetMovingPhotoEffectMode().value_or(0); onFetchPhotoVo.editTime = data.GetEditTime().value_or(0); onFetchPhotoVo.coverPosition = data.GetCoverPosition().value_or(0); diff --git a/frameworks/innerkitsimpl/media_library_cloud_sync/src/mdk_record_photos_data.cpp b/frameworks/innerkitsimpl/media_library_cloud_sync/src/mdk_record_photos_data.cpp index e4902a6ec742534a0b4a218b4c5fc88d26b48603..11f2909c2f1922d20660f58634e056120e83b49b 100644 --- a/frameworks/innerkitsimpl/media_library_cloud_sync/src/mdk_record_photos_data.cpp +++ b/frameworks/innerkitsimpl/media_library_cloud_sync/src/mdk_record_photos_data.cpp @@ -372,6 +372,15 @@ MDKRecordPhotosData &MDKRecordPhotosData::SetDynamicRangeType(const int32_t dyna this->attributes_[PhotoColumn::PHOTO_DYNAMIC_RANGE_TYPE] = MDKRecordField(dynamicRangeType); return *this; } +std::optional MDKRecordPhotosData::GetHdrMode() const +{ + return this->recordReader_.GetIntValue(this->attributes_, PhotoColumn::PHOTO_HDR_MODE); +} +MDKRecordPhotosData &MDKRecordPhotosData::SetHdrMode(const int32_t hdrMode) +{ + this->attributes_[PhotoColumn::PHOTO_HDR_MODE] = MDKRecordField(hdrMode); + return *this; +} std::optional MDKRecordPhotosData::GetFrontCamera() const { return this->recordReader_.GetStringValue(this->attributes_, PhotoColumn::PHOTO_FRONT_CAMERA); diff --git a/frameworks/innerkitsimpl/media_library_helper/include/media_image_framework_utils.h b/frameworks/innerkitsimpl/media_library_helper/include/media_image_framework_utils.h index 7b1835cd8a8fa64dce98dfe47f2ff9653562968d..f39c7558127476349bbd948308f9c18235a3372c 100644 --- a/frameworks/innerkitsimpl/media_library_helper/include/media_image_framework_utils.h +++ b/frameworks/innerkitsimpl/media_library_helper/include/media_image_framework_utils.h @@ -20,6 +20,7 @@ #include "picture.h" #include "exif_rotate_utils.h" +#include "userfile_manager_types.h" namespace OHOS { namespace Media { @@ -37,6 +38,7 @@ public: static int32_t GetExifRotate(const std::string &path, int32_t &exifRotate); static bool FlipAndRotatePixelMap(PixelMap &pixelMap, int32_t exifRotate); static bool FlipAndRotatePixelMap(PixelMap &pixelMap, const FlipAndRotateInfo &info); + static HdrMode ConvertImageHdrTypeToHdrMode(ImageHdrType hdrType); }; } // namespace Media } // namespace OHOS diff --git a/frameworks/innerkitsimpl/media_library_helper/src/fetch_result.cpp b/frameworks/innerkitsimpl/media_library_helper/src/fetch_result.cpp index 5579a2e6280a300e1157abeb284a40825d1ef2dd..cf8bab68301b64877824824ae89536b40e9b429a 100644 --- a/frameworks/innerkitsimpl/media_library_helper/src/fetch_result.cpp +++ b/frameworks/innerkitsimpl/media_library_helper/src/fetch_result.cpp @@ -81,6 +81,7 @@ static const ResultTypeMap &GetResultTypeMap() { PhotoColumn::PHOTO_SHOOTING_MODE_TAG, TYPE_STRING }, { PhotoColumn::PHOTO_LAST_VISIT_TIME, TYPE_INT64 }, { PhotoColumn::PHOTO_DYNAMIC_RANGE_TYPE, TYPE_INT32 }, + { PhotoColumn::PHOTO_HDR_MODE, TYPE_INT32 }, { PhotoColumn::PHOTO_LCD_SIZE, TYPE_STRING }, { PhotoColumn::PHOTO_THUMB_SIZE, TYPE_STRING }, { PhotoColumn::MOVING_PHOTO_EFFECT_MODE, TYPE_INT32 }, diff --git a/frameworks/innerkitsimpl/media_library_helper/src/media_column.cpp b/frameworks/innerkitsimpl/media_library_helper/src/media_column.cpp index c506edbf8783e01e64e9b36c954a25648e31fa44..cb369e43c3637e7d19cff01097769bf0a6a39e67 100644 --- a/frameworks/innerkitsimpl/media_library_helper/src/media_column.cpp +++ b/frameworks/innerkitsimpl/media_library_helper/src/media_column.cpp @@ -93,6 +93,7 @@ const std::string PhotoColumn::PHOTO_QUALITY = "photo_quality"; const std::string PhotoColumn::PHOTO_FIRST_VISIT_TIME = "first_visit_time"; const std::string PhotoColumn::PHOTO_DEFERRED_PROC_TYPE = "deferred_proc_type"; const std::string PhotoColumn::PHOTO_DYNAMIC_RANGE_TYPE = "dynamic_range_type"; +const std::string PhotoColumn::PHOTO_HDR_MODE = "hdr_mode"; const std::string PhotoColumn::MOVING_PHOTO_EFFECT_MODE = "moving_photo_effect_mode"; const std::string PhotoColumn::PHOTO_LCD_SIZE = "lcd_size"; const std::string PhotoColumn::PHOTO_THUMB_SIZE = "thumb_size"; @@ -312,6 +313,7 @@ const std::string PhotoColumn::CREATE_PHOTO_TABLE = "CREATE TABLE IF NOT EXISTS PHOTO_SOUTH_DEVICE_TYPE + " INT NOT NULL DEFAULT 0, " + PHOTO_COMPOSITE_DISPLAY_STATUS + " INT NOT NULL DEFAULT 0, " + PHOTO_FILE_SOURCE_TYPE + " INT NOT NULL DEFAULT 0 " + + PHOTO_HDR_MODE + " INT NOT NULL DEFAULT 0, " + ") "; const std::string PhotoColumn::CREATE_CLOUD_ID_INDEX = BaseColumn::CreateIndex() + @@ -664,6 +666,7 @@ const std::set PhotoColumn::PHOTO_COLUMNS = { PhotoColumn::PHOTO_MEDIA_SUFFIX, PhotoColumn::PHOTO_IS_RECENT_SHOW, PhotoColumn::PHOTO_IS_RECTIFICATION_COVER, PhotoColumn::PHOTO_EXIF_ROTATE, PhotoColumn::PHOTO_HAS_APPLINK, PhotoColumn::PHOTO_APPLINK, PhotoColumn::PHOTO_EXIST_COMPATIBLE_DUPLICATE, PhotoColumn::PHOTO_COMPOSITE_DISPLAY_STATUS, + PhotoColumn::PHOTO_HDR_MODE, }; bool PhotoColumn::IsPhotoColumn(const std::string &columnName) diff --git a/frameworks/innerkitsimpl/media_library_helper/src/media_image_framework_utils.cpp b/frameworks/innerkitsimpl/media_library_helper/src/media_image_framework_utils.cpp index 682159e47b1b5f5495eb95eedd6d9ba2ccaf551d..ad18f61ffefcdf4d72755c721373c9306df4ee11 100644 --- a/frameworks/innerkitsimpl/media_library_helper/src/media_image_framework_utils.cpp +++ b/frameworks/innerkitsimpl/media_library_helper/src/media_image_framework_utils.cpp @@ -21,12 +21,23 @@ #include "medialibrary_errno.h" #include "media_exif.h" #include "media_log.h" +#include "hdr_type.h" using namespace std; namespace OHOS { namespace Media { +static const std::map hdrMap = { + { ImageHdrType::UNKNOWN, HdrMode::DEFAULT }, + { ImageHdrType::SDR, HdrMode::DEFAULT }, + { ImageHdrType::HDR_ISO_SINGLE, HdrMode::HDR_ISO_SINGLE }, + { ImageHdrType::HDR_ISO_DUAL, HdrMode::HDR_ISO_DUAL }, + { ImageHdrType::HDR_CUVA, HdrMode::HDR_CUVA }, + { ImageHdrType::HDR_VIVID_SINGLE, HdrMode::HDR_VIVID_SINGLE }, + { ImageHdrType::HDR_VIVID_DUAL, HdrMode::HDR_VIVID_DUAL }, +}; + int32_t MediaImageFrameWorkUtils::GetExifRotate( const std::unique_ptr &imageSource, int32_t &exifRotate) { @@ -101,5 +112,13 @@ bool MediaImageFrameWorkUtils::FlipAndRotatePixelMap(PixelMap &pixelMap, const F } return true; } + +HdrMode MediaImageFrameWorkUtils::ConvertImageHdrTypeToHdrMode(ImageHdrType hdrType) +{ + if (hdrMap.find(hdrType) == hdrMap.end()) { + return HdrMode::DEFAULT; + } + return hdrMap.at(hdrType); +} } // namespace Media } // namespace OHOS \ No newline at end of file diff --git a/frameworks/innerkitsimpl/medialibrary_data_extension/include/medialibrary_data_manager.h b/frameworks/innerkitsimpl/medialibrary_data_extension/include/medialibrary_data_manager.h index 57c5ba0c222fb1b1030845a9ec38a94735d74481..1a915115a855bf2ebffe96c96ce587ee0fad5d37 100644 --- a/frameworks/innerkitsimpl/medialibrary_data_extension/include/medialibrary_data_manager.h +++ b/frameworks/innerkitsimpl/medialibrary_data_extension/include/medialibrary_data_manager.h @@ -100,6 +100,8 @@ public: EXPORT int32_t UpdateBurstFromGallery(); // update burst_cover_level from gallery EXPORT int32_t UpdateBurstCoverLevelFromGallery(); + // update hdr mode + EXPORT int32_t UpdatePhotoHdrMode(); EXPORT std::shared_ptr rdbStore_; diff --git a/frameworks/innerkitsimpl/medialibrary_data_extension/include/medialibrary_subscriber.h b/frameworks/innerkitsimpl/medialibrary_data_extension/include/medialibrary_subscriber.h index b35f3023991f1e00f32e251c17a1b36a68754d80..5fe7d3722a2306483c818188e9463d456ed54758 100644 --- a/frameworks/innerkitsimpl/medialibrary_data_extension/include/medialibrary_subscriber.h +++ b/frameworks/innerkitsimpl/medialibrary_data_extension/include/medialibrary_subscriber.h @@ -87,6 +87,7 @@ private: DelayTask thumbnailBgDelayTask_{"thumbnailBgTask"}; EXPORT void ClearDirtyData(); EXPORT void DoBackgroundOperation(); + EXPORT void DoBackgroundOperationStepTwo(); EXPORT void DoThumbnailBgOperation(); EXPORT void StopBackgroundOperation(); EXPORT void StopThumbnailBgOperation(); diff --git a/frameworks/innerkitsimpl/medialibrary_data_extension/include/orm/media_column_type.h b/frameworks/innerkitsimpl/medialibrary_data_extension/include/orm/media_column_type.h index 42530443cc6b37297bbbcb774fc45f18b4ffc16b..7912110ffb0ab51ca2261547693be97fd7889645 100644 --- a/frameworks/innerkitsimpl/medialibrary_data_extension/include/orm/media_column_type.h +++ b/frameworks/innerkitsimpl/medialibrary_data_extension/include/orm/media_column_type.h @@ -82,6 +82,7 @@ static const std::map PHOTOS_COLUMNS = { {PhotoColumn::PHOTO_FIRST_VISIT_TIME, DataType::LONG}, {PhotoColumn::PHOTO_DEFERRED_PROC_TYPE, DataType::INT}, {PhotoColumn::PHOTO_DYNAMIC_RANGE_TYPE, DataType::INT}, + {PhotoColumn::PHOTO_HDR_MODE, DataType::INT}, {PhotoColumn::MOVING_PHOTO_EFFECT_MODE, DataType::INT}, {PhotoColumn::PHOTO_COVER_POSITION, DataType::LONG}, {PhotoColumn::PHOTO_IS_RECTIFICATION_COVER, DataType::INT}, diff --git a/frameworks/innerkitsimpl/medialibrary_data_extension/include/orm/photos_po_writer.h b/frameworks/innerkitsimpl/medialibrary_data_extension/include/orm/photos_po_writer.h index 66e19710b94f474c3d10c206baf30ff0907333f4..3d0a9747fabf4b73a74d80e07c43a73a44594f93 100644 --- a/frameworks/innerkitsimpl/medialibrary_data_extension/include/orm/photos_po_writer.h +++ b/frameworks/innerkitsimpl/medialibrary_data_extension/include/orm/photos_po_writer.h @@ -88,6 +88,7 @@ private: {PhotoColumn::PHOTO_SHOOTING_MODE, &PhotosPoWriter::SetShootingMode}, {PhotoColumn::PHOTO_SHOOTING_MODE_TAG, &PhotosPoWriter::SetShootingModeTag}, {PhotoColumn::PHOTO_DYNAMIC_RANGE_TYPE, &PhotosPoWriter::SetDynamicRangType}, + {PhotoColumn::PHOTO_HDR_MODE, &PhotosPoWriter::SetHdrMode}, {PhotoColumn::PHOTO_FRONT_CAMERA, &PhotosPoWriter::SetFrontCamera}, {PhotoColumn::PHOTO_DETAIL_TIME, &PhotosPoWriter::SetDetailTime}, {PhotoColumn::PHOTO_EDIT_TIME, &PhotosPoWriter::SetEditTime}, @@ -321,6 +322,12 @@ private: CHECK_AND_RETURN(!errConn); this->photosPo_.dynamicRangeType = std::get(val); } + void SetHdrMode(std::variant &val) + { + bool errConn = !std::holds_alternative(val); + CHECK_AND_RETURN(!errConn); + this->photosPo_.hdrMode = std::get(val); + } void SetFrontCamera(std::variant &val) { bool errConn = !std::holds_alternative(val); diff --git a/frameworks/innerkitsimpl/medialibrary_data_extension/include/orm/po/photos_po.h b/frameworks/innerkitsimpl/medialibrary_data_extension/include/orm/po/photos_po.h index 5e1dce2b0d60a4650038f1765e00fdd6c7b72166..67be92c0a99df1335e0a2e7bcfcc91e0b19621fe 100644 --- a/frameworks/innerkitsimpl/medialibrary_data_extension/include/orm/po/photos_po.h +++ b/frameworks/innerkitsimpl/medialibrary_data_extension/include/orm/po/photos_po.h @@ -58,6 +58,7 @@ public: std::optional shootingMode; // PhotoColumn::PHOTO_SHOOTING_MODE; std::optional shootingModeTag; // PhotoColumn::PHOTO_SHOOTING_MODE_TAG; std::optional dynamicRangeType; // PhotoColumn::PHOTO_DYNAMIC_RANGE_TYPE; + std::optional hdrMode; // PhotoColumn::PHOTO_HDR_MODE; std::optional frontCamera; // PhotoColumn::PHOTO_FRONT_CAMERA; std::optional detailTime; // PhotoColumn::PHOTO_DETAIL_TIME; std::optional editTime; // PhotoColumn::PHOTO_EDIT_TIME; @@ -144,6 +145,7 @@ private: << "\"shootingMode\": \"" << shootingMode.value_or("") << "\", " << "\"shootingModeTag\": \"" << shootingModeTag.value_or("") << "\", " << "\"dynamicRangeType\": " << dynamicRangeType.value_or(0) << ", " + << "\"hdrMode\": " << hdrMode.value_or(0) << ", " << "\"frontCamera\": \"" << frontCamera.value_or("") << "\", " << "\"coverPosition\": " << coverPosition.value_or(0) << ", " << "\"isRectificationCover\": " << isRectificationCover.value_or(0) << ", " diff --git a/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_album_fusion_utils.cpp b/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_album_fusion_utils.cpp index b961bb5853b235dda646d60eebab9796092f4013..3126e72ffad16448eb01aaa9230c48cd6bda743a 100644 --- a/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_album_fusion_utils.cpp +++ b/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_album_fusion_utils.cpp @@ -137,6 +137,7 @@ static unordered_map commonColumnTypeMap = { {PhotoColumn::PHOTO_FIRST_VISIT_TIME, ResultSetDataType::TYPE_INT64}, {PhotoColumn::PHOTO_DEFERRED_PROC_TYPE, ResultSetDataType::TYPE_INT32}, {PhotoColumn::PHOTO_DYNAMIC_RANGE_TYPE, ResultSetDataType::TYPE_INT32}, + {PhotoColumn::PHOTO_HDR_MODE, ResultSetDataType::TYPE_INT32}, {PhotoColumn::MOVING_PHOTO_EFFECT_MODE, ResultSetDataType::TYPE_INT32}, {PhotoColumn::PHOTO_FRONT_CAMERA, ResultSetDataType::TYPE_STRING}, {PhotoColumn::PHOTO_BURST_COVER_LEVEL, ResultSetDataType::TYPE_INT32}, diff --git a/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_asset_operations.cpp b/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_asset_operations.cpp index 6c68b9a0e0cbf467305265d9a85129e55b0dc51b..7d74b20423b996b7c9391d6ab8f8f8aeacc0f8da 100644 --- a/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_asset_operations.cpp +++ b/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_asset_operations.cpp @@ -191,6 +191,7 @@ const std::unordered_map FILEASSET_MEMBER_MAP = { { PhotoColumn::PHOTO_FIRST_VISIT_TIME, MEMBER_TYPE_INT64 }, { PhotoColumn::PHOTO_DEFERRED_PROC_TYPE, MEMBER_TYPE_INT32 }, { PhotoColumn::PHOTO_DYNAMIC_RANGE_TYPE, MEMBER_TYPE_INT32 }, + { PhotoColumn::PHOTO_HDR_MODE, MEMBER_TYPE_INT32 }, { PhotoColumn::PHOTO_LCD_SIZE, MEMBER_TYPE_STRING }, { PhotoColumn::PHOTO_THUMB_SIZE, MEMBER_TYPE_STRING }, { PhotoColumn::PHOTO_FRONT_CAMERA, MEMBER_TYPE_STRING }, diff --git a/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_data_manager.cpp b/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_data_manager.cpp index 55c13a3ad1576acb5b420f752828a729facf8c03..4b65ec7570ac76fb274e04b1c28458519e51bcc1 100644 --- a/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_data_manager.cpp +++ b/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_data_manager.cpp @@ -137,6 +137,7 @@ #include "medialibrary_photo_operations.h" #include "medialibrary_upgrade_utils.h" #include "settings_data_manager.h" +#include "media_image_framework_utils.h" using namespace std; using namespace OHOS::AppExecFwk; @@ -3263,6 +3264,76 @@ int32_t MediaLibraryDataManager::UpdateBurstCoverLevelFromGallery() return E_OK; } +static shared_ptr QueryUninitializedHdrPhoto(const shared_ptr &rdbStore) +{ + string querySql = "SELECT " + MediaColumn::MEDIA_FILE_PATH + ", " + MediaColumn::MEDIA_ID + " FROM " + + PhotoColumn::PHOTOS_TABLE + " WHERE " + MediaColumn::MEDIA_TYPE + " = " + to_string(MEDIA_TYPE_IMAGE) + + " AND " + PhotoColumn::PHOTO_DYNAMIC_RANGE_TYPE + " = " + + to_string(static_cast(DynamicRangeType::HDR)) + + " AND " + PhotoColumn::PHOTO_HDR_MODE + " = " + to_string(static_cast(HdrMode::DEFAULT)); + + auto resultSet = rdbStore->QueryByStep(querySql); + CHECK_AND_RETURN_RET_LOG(resultSet, nullptr, "failed to acquire result from visitor query"); + return resultSet; +} + +static int32_t UpdateHdrMode(const shared_ptr &rdbStore, + shared_ptr &resultSet) +{ + CHECK_AND_RETURN_RET_LOG(resultSet, E_ERR, "resultSet is nullptr"); + int32_t count = -1; + int32_t retCount = resultSet->GetRowCount(count); + if (count == 0) { + MEDIA_INFO_LOG("no HDR mode need to update"); + return E_SUCCESS; + } + if (retCount != E_SUCCESS || count < 0) { + return E_ERR; + } + + while (resultSet->GoToNextRow() == NativeRdb::E_OK) { + if (!isChargingAndScreenOffPtr()) { + MEDIA_ERR_LOG("current status is not charging or screenOn"); + return E_ERR; + } + string filePath = GetStringVal(MediaColumn::MEDIA_FILE_PATH, resultSet); + SourceOptions opts; + uint32_t err = E_OK; + std::unique_ptr imageSource = ImageSource::CreateImageSource(filePath, opts, err); + if (err != E_OK || imageSource == nullptr) { + MEDIA_ERR_LOG("CreateImageSource failed, filePath: %{public}s", filePath.c_str()); + continue; + } + HdrMode hdrMode = HdrMode::DEFAULT; + + int32_t fileId = GetInt32Val(MediaColumn::MEDIA_ID, resultSet); + string updateSql = "UPDATE " + PhotoColumn::PHOTOS_TABLE + " SET " + PhotoColumn::PHOTO_HDR_MODE + " = " + + to_string(static_cast(hdrMode)) + " WHERE " + MediaColumn::MEDIA_ID + " = " + to_string(fileId); + int32_t ret = rdbStore->ExecuteSql(updateSql); + if (ret != NativeRdb::E_OK) { + MEDIA_ERR_LOG("Failed to update rdb"); + continue; + } + } + return E_SUCCESS; +} + +int32_t MediaLibraryDataManager::UpdatePhotoHdrMode() +{ + MEDIA_INFO_LOG("Begin UpdatePhotoHdrMode"); + MediaLibraryTracer tracer; + tracer.Start("MediaLibraryDataManager::UpdatePhotoHdrMode"); + shared_lock sharedLock(mgrSharedMutex_); + CHECK_AND_RETURN_RET_LOG(refCnt_.load() > 0, E_FAIL, "MediaLibraryDataManager is not initialized"); + CHECK_AND_RETURN_RET_LOG(rdbStore_ != nullptr, E_FAIL, "rdbStore_ is nullptr"); + + auto resultSet = QueryUninitializedHdrPhoto(rdbStore_); + int32_t ret = UpdateHdrMode(rdbStore_, resultSet); + CHECK_AND_RETURN_RET_LOG(ret == E_SUCCESS, E_FAIL, "failed to UpdateHdrMode"); + MEDIA_INFO_LOG("End UpdatePhotoHdrMode"); + return ret; +} + int32_t MediaLibraryDataManager::BatchInsertMediaAnalysisData(MediaLibraryCommand &cmd, const vector &values) { diff --git a/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_rdbstore.cpp b/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_rdbstore.cpp index a129711999676e1cb9d71ca226a9354b97d6a048..c4486cef5586857edb18789d4a3058aeeca5097f 100755 --- a/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_rdbstore.cpp +++ b/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_rdbstore.cpp @@ -3451,6 +3451,16 @@ void AddDynamicRangeType(RdbStore &store) ExecSqls(sqls, store); } +void AddHdrMode(RdbStore &store) +{ + const vector sqls = { + "ALTER TABLE " + PhotoColumn::PHOTOS_TABLE + " ADD COLUMN " + + PhotoColumn::PHOTO_HDR_MODE + " INT DEFAULT 0 NOT NULL" + }; + MEDIA_INFO_LOG("start add hdr_mode column"); + ExecSqls(sqls, store); +} + void AddLcdAndThumbSizeColumns(RdbStore &store) { const vector sqls = { @@ -5285,6 +5295,12 @@ static void UpgradeExtensionPart10(RdbStore &store, int32_t oldVersion) AddFileSourceType(store); RdbUpgradeUtils::SetUpgradeStatus(VERSION_ADD_FILE_SOURCE_TYPE, true); } + + if (oldVersion < VERSION_ADD_HDR_MODE && + !RdbUpgradeUtils::HasUpgraded(VERSION_ADD_HDR_MODE, true)) { + AddHdrMode(store); + RdbUpgradeUtils::SetUpgradeStatus(VERSION_ADD_HDR_MODE, true); + } } static void UpgradeExtensionPart9(RdbStore &store, int32_t oldVersion) diff --git a/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_subscriber.cpp b/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_subscriber.cpp index dc2d681d887b1f47077ddb2bc05bff559cc34d27..04906c5fc2bd7201c981bd68bd787f8057001f7d 100644 --- a/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_subscriber.cpp +++ b/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_subscriber.cpp @@ -702,6 +702,30 @@ static int32_t DoUpdateBurstCoverLevelFromGallery() return E_SUCCESS; } +static void UpdatePhotoHdrModeTask(AsyncTaskData *data) +{ + auto dataManager = MediaLibraryDataManager::GetInstance(); + CHECK_AND_RETURN_LOG(dataManager != nullptr, "dataManager is nullptr"); + + int32_t result = dataManager->UpdatePhotoHdrMode(); + CHECK_AND_PRINT_LOG(result == E_OK, "UpdatePhotoHdrMode faild"); +} + +static int32_t DoUpdatePhotoHdrMode() +{ + MEDIA_INFO_LOG("Begin DoUpdatePhotoHdrMode"); + auto asyncWorker = MediaLibraryAsyncWorker::GetInstance(); + CHECK_AND_RETURN_RET_LOG(asyncWorker != nullptr, E_FAIL, + "Failed to get async worker instance!"); + + shared_ptr updateHdrModeTask = + make_shared(UpdatePhotoHdrModeTask, nullptr); + CHECK_AND_RETURN_RET_LOG(updateHdrModeTask != nullptr, E_FAIL, + "Failed to create async task for updateHdrModeTask!"); + asyncWorker->AddTask(updateHdrModeTask, false); + return E_SUCCESS; +} + static void UpdateDirtyForBeta(const shared_ptr& prefs) { CHECK_AND_RETURN_LOG((IsBetaVersion() && prefs != nullptr), "not need UpdateDirtyForBeta"); @@ -804,6 +828,7 @@ void MedialibrarySubscriber::DoBackgroundOperation() } ret = DoUpdateBurstCoverLevelFromGallery(); CHECK_AND_PRINT_LOG(ret == E_OK, "DoUpdateBurstCoverLevelFromGallery faild"); + DoUpdatePhotoHdrMode(); RecoverBackgroundDownloadCloudMediaAsset(); CloudMediaAssetManager::GetInstance().StartDeleteCloudMediaAssets(); // compat old-version moving photo @@ -813,6 +838,11 @@ void MedialibrarySubscriber::DoBackgroundOperation() if (watch != nullptr) { watch->DoAging(); } + DoBackgroundOperationStepTwo(); +} + +void MedialibrarySubscriber::DoBackgroundOperationStepTwo() +{ DfxMovingPhoto::AbnormalMovingPhotoStatistics(); PhotoMimetypeOperation::UpdateInvalidMimeType(); DfxManager::GetInstance()->HandleTwoDayMissions(); diff --git a/frameworks/innerkitsimpl/medialibrary_data_extension/src/operation/photo_custom_restore_operation.cpp b/frameworks/innerkitsimpl/medialibrary_data_extension/src/operation/photo_custom_restore_operation.cpp index 518d897cc2f89bd4783327c1507900f3279d2f8d..d1bd056af21ec3207eceb57e15c701c67cb7d649 100644 --- a/frameworks/innerkitsimpl/medialibrary_data_extension/src/operation/photo_custom_restore_operation.cpp +++ b/frameworks/innerkitsimpl/medialibrary_data_extension/src/operation/photo_custom_restore_operation.cpp @@ -796,6 +796,7 @@ NativeRdb::ValuesBucket PhotoCustomRestoreOperation::GetInsertValue( value.PutLong(PhotoColumn::PHOTO_LAST_VISIT_TIME, data->GetLastVisitTime()); value.PutString(PhotoColumn::PHOTO_FRONT_CAMERA, data->GetFrontCamera()); value.PutInt(PhotoColumn::PHOTO_DYNAMIC_RANGE_TYPE, data->GetDynamicRangeType()); + value.PutInt(PhotoColumn::PHOTO_HDR_MODE, data->GetHdrMode()); value.PutString(PhotoColumn::PHOTO_USER_COMMENT, data->GetUserComment()); value.PutInt(PhotoColumn::PHOTO_QUALITY, 0); FillFileInfo(fileInfo, data); diff --git a/frameworks/innerkitsimpl/test/unittest/media_library_cloud_sync_test/include/utils/cloud_data_utils.h b/frameworks/innerkitsimpl/test/unittest/media_library_cloud_sync_test/include/utils/cloud_data_utils.h index 47b4ccc73f84d9e9322c92e566c61ec152f0fa63..526562151244ff8bc87a614f4a160f974a983b1b 100644 --- a/frameworks/innerkitsimpl/test/unittest/media_library_cloud_sync_test/include/utils/cloud_data_utils.h +++ b/frameworks/innerkitsimpl/test/unittest/media_library_cloud_sync_test/include/utils/cloud_data_utils.h @@ -251,6 +251,9 @@ public: if (std::find(expetedFileds.begin(), expetedFileds.end(), "dynamicRangeType") != expetedFileds.end()) { EXPECT_EQ(cmp.dynamicRangeType.value_or(0), photosData.GetDynamicRangeType().value_or(0)); } + if (std::find(expetedFileds.begin(), expetedFileds.end(), "hdrMode") != expetedFileds.end()) { + EXPECT_EQ(cmp.hdrMode.value_or(0), photosData.GetHdrMode().value_or(0)); + } if (std::find(expetedFileds.begin(), expetedFileds.end(), "frontCamera") != expetedFileds.end()) { EXPECT_EQ(cmp.frontCamera.value_or(""), photosData.GetFrontCamera().value_or("")); } diff --git a/frameworks/services/media_backup_extension/include/base_restore.h b/frameworks/services/media_backup_extension/include/base_restore.h index 377377b4110f504b8119d2830ef46eb9c7674e01..cfc3eb4086122db9eae4af11e4972189d120fd00 100644 --- a/frameworks/services/media_backup_extension/include/base_restore.h +++ b/frameworks/services/media_backup_extension/include/base_restore.h @@ -188,6 +188,7 @@ protected: nlohmann::json GetBackupErrorInfoJson(); void SetParameterForRestore(); void StopParameterForRestore(); + void UpdateHdrMode(std::vector &fileInfos); protected: std::atomic migrateDatabaseNumber_{0}; diff --git a/frameworks/services/media_backup_extension/include/clone_restore.h b/frameworks/services/media_backup_extension/include/clone_restore.h index bdff66c5a79a5b6bad6dcdb7934f642fe26499cd..962bb80c7aae55493465431057cb9ef8ffda24bc 100644 --- a/frameworks/services/media_backup_extension/include/clone_restore.h +++ b/frameworks/services/media_backup_extension/include/clone_restore.h @@ -248,6 +248,8 @@ private: CloneRestoreConfigInfo GetCurrentDeviceCloneConfigInfo(); CloneRestoreConfigInfo GetCloneConfigInfoFromOriginDB(); bool CheckSouthDeviceTypeMatchSwitchStatus(SwitchStatus switchStatus); + void RestoreHdrMode(std::vector &fileInfos); + bool CheckIsHdrModeNeedUpdate(); private: std::atomic migrateDatabaseAlbumNumber_{0}; diff --git a/frameworks/services/media_backup_extension/src/base_restore.cpp b/frameworks/services/media_backup_extension/src/base_restore.cpp index 771385eff67ff001345190d8a3b2a87af004e0d9..8795839f38e9a2fdeb5f7c5c560a743f4bc31329 100644 --- a/frameworks/services/media_backup_extension/src/base_restore.cpp +++ b/frameworks/services/media_backup_extension/src/base_restore.cpp @@ -677,6 +677,7 @@ void BaseRestore::SetValueFromMetaData(FileInfo &fileInfo, NativeRdb::ValuesBuck value.PutLong(PhotoColumn::PHOTO_LAST_VISIT_TIME, data->GetLastVisitTime()); value.PutString(PhotoColumn::PHOTO_FRONT_CAMERA, data->GetFrontCamera()); value.PutInt(PhotoColumn::PHOTO_DYNAMIC_RANGE_TYPE, data->GetDynamicRangeType()); + value.PutInt(PhotoColumn::PHOTO_HDR_MODE, data->GetHdrMode()); InsertDateAdded(data, value); SetOrientationAndExifRotate(fileInfo, value, data); InsertUserComment(data, value, fileInfo); @@ -2213,5 +2214,29 @@ void BaseRestore::BackupRelease() void BaseRestore::RestoreRelease() { } + +void BaseRestore::UpdateHdrMode(std::vector &fileInfos) +{ + for (auto &fileInfo : fileInfos) { + // load ImageSource to get HDR mode + uint32_t err = E_OK; + SourceOptions opts; + std::unique_ptr imageSource = ImageSource::CreateImageSource(fileInfo.cloudPath, opts, err); + if (imageSource == nullptr || err != E_OK) { + MEDIA_ERR_LOG("CreateImageSource failed: %{public}d", err); + continue; + } + HdrMode hdrMode = HdrMode::DEFAULT; + + std::unique_ptr predicates = + make_unique(PhotoColumn::PHOTOS_TABLE); + predicates->EqualTo(MediaColumn::MEDIA_ID, fileInfo.fileIdNew); + int32_t changeRows = 0; + NativeRdb::ValuesBucket values; + values.PutInt(PhotoColumn::PHOTO_HDR_MODE, static_cast(hdrMode)); + int32_t ret = BackupDatabaseUtils::Update(mediaLibraryRdb_, changeRows, values, predicates); + CHECK_AND_RETURN_LOG(changeRows >= 0 && ret == E_OK, "failed to update columns"); + } +} } // namespace Media } // namespace OHOS diff --git a/frameworks/services/media_backup_extension/src/clone_restore.cpp b/frameworks/services/media_backup_extension/src/clone_restore.cpp index 641599c93f79d6dfa865185a7469d7a1ff9b3d23..912c347664c5e9dc883673aa4949485f08f63b38 100644 --- a/frameworks/services/media_backup_extension/src/clone_restore.cpp +++ b/frameworks/services/media_backup_extension/src/clone_restore.cpp @@ -2288,6 +2288,7 @@ void CloneRestore::RestorePhotoBatch(int32_t offset, int32_t isRelatedToPhotoMap vector fileInfos = QueryFileInfos(offset, isRelatedToPhotoMap); CHECK_AND_EXECUTE(InsertPhoto(fileInfos) == E_OK, AddToPhotosFailedOffsets(offset)); + RestoreHdrMode(fileInfos); MEDIA_INFO_LOG("end restore photo, offset: %{public}d", offset); } @@ -2299,9 +2300,31 @@ void CloneRestore::RestoreBatchForCloud(int32_t offset, int32_t isRelatedToPhoto CHECK_AND_EXECUTE(InsertCloudPhoto(sceneCode_, fileInfos, SourceType::PHOTOS) == E_OK, AddToPhotosFailedOffsets(offset)); + RestoreHdrMode(fileInfos); MEDIA_INFO_LOG("singleCloud end restore photo, offset: %{public}d", offset); } +void CloneRestore::RestoreHdrMode(std::vector &fileInfos) +{ + if (CheckIsHdrModeNeedUpdate()) { + UpdateHdrMode(fileInfos); + } +} + +bool CloneRestore::CheckIsHdrModeNeedUpdate() +{ + if (tableCommonColumnInfoMap_.find(PhotoColumn::PHOTOS_TABLE) == tableCommonColumnInfoMap_.end()) { + // without PHOTOS_TABLE + return false; + } + if (tableCommonColumnInfoMap_[PhotoColumn::PHOTOS_TABLE].find(PhotoColumn::PHOTO_HDR_MODE) == + tableCommonColumnInfoMap_[PhotoColumn::PHOTOS_TABLE].end()) { + // without PHOTO_HDR_MODE + return true; + } + return false; +} + int CloneRestore::InsertCloudPhoto(int32_t sceneCode, std::vector &fileInfos, int32_t sourceType) { MEDIA_INFO_LOG("singleCloud start insert cloud %{public}zu photos", fileInfos.size()); diff --git a/frameworks/services/media_backup_extension/src/cloud_backup_restore.cpp b/frameworks/services/media_backup_extension/src/cloud_backup_restore.cpp index 0b779138dd8b5ac4397fcbb991f008a26b654475..7a8cae9694fcecf169a0d529adced8af0fb9574b 100644 --- a/frameworks/services/media_backup_extension/src/cloud_backup_restore.cpp +++ b/frameworks/services/media_backup_extension/src/cloud_backup_restore.cpp @@ -145,6 +145,7 @@ void CloudBackupRestore::SetValueFromMetaData(FileInfo &fileInfo, NativeRdb::Val value.PutLong(PhotoColumn::PHOTO_LAST_VISIT_TIME, data->GetLastVisitTime()); value.PutString(PhotoColumn::PHOTO_FRONT_CAMERA, data->GetFrontCamera()); value.PutInt(PhotoColumn::PHOTO_DYNAMIC_RANGE_TYPE, data->GetDynamicRangeType()); + value.PutInt(PhotoColumn::PHOTO_HDR_MODE, data->GetHdrMode()); value.PutString(PhotoColumn::PHOTO_USER_COMMENT, data->GetUserComment()); BaseRestore::SetOrientationAndExifRotate(fileInfo, value, data); diff --git a/frameworks/services/media_backup_extension/src/others_clone_restore.cpp b/frameworks/services/media_backup_extension/src/others_clone_restore.cpp index 2350a275f1b76cc4e988866bc7c871b93a4435f0..4ecc273d7469b6658623dbc3d55c9794474ea5d8 100644 --- a/frameworks/services/media_backup_extension/src/others_clone_restore.cpp +++ b/frameworks/services/media_backup_extension/src/others_clone_restore.cpp @@ -856,6 +856,7 @@ void OthersCloneRestore::HandleInsertBatch(int32_t offset) insertInfos.push_back(info); } InsertPhoto(insertInfos); + UpdateHdrMode(insertInfos); } void OthersCloneRestore::ReportCloneBefore() diff --git a/frameworks/services/media_backup_extension/src/upgrade_restore.cpp b/frameworks/services/media_backup_extension/src/upgrade_restore.cpp index 1aa58aa6942351c2edbfdf5ae8f2f250e4b0522b..9f82023d1d8832872a2de1bf4581cd09636371fc 100644 --- a/frameworks/services/media_backup_extension/src/upgrade_restore.cpp +++ b/frameworks/services/media_backup_extension/src/upgrade_restore.cpp @@ -656,6 +656,7 @@ void UpgradeRestore::RestoreBatchForCloud(int32_t minId) int64_t startInsertPhoto = MediaFileUtils::UTCTimeMilliSeconds(); CHECK_AND_EXECUTE(InsertCloudPhoto(sceneCode_, infos, SourceType::GALLERY) == E_OK, AddToGalleryFailedOffsets(minId)); + UpdateHdrMode(infos); int64_t startUpdateAnalysisTotal = MediaFileUtils::UTCTimeMilliSeconds(); auto fileIdPairs = BackupDatabaseUtils::CollectFileIdPairs(infos); BackupDatabaseUtils::UpdateAnalysisTotalTblStatus(mediaLibraryRdb_, fileIdPairs); diff --git a/frameworks/services/media_scanner/include/scanner/metadata.h b/frameworks/services/media_scanner/include/scanner/metadata.h index 77b482b02b40ee6003a1d42ef1c40330be2ab73c..0eefc6aee09900c015085c9985d0d88caa861059 100644 --- a/frameworks/services/media_scanner/include/scanner/metadata.h +++ b/frameworks/services/media_scanner/include/scanner/metadata.h @@ -151,6 +151,9 @@ public: EXPORT void SetDynamicRangeType(const VariantData &type); EXPORT int32_t GetDynamicRangeType() const; + EXPORT void SetHdrMode(const VariantData &type); + EXPORT int32_t GetHdrMode() const; + EXPORT void SetCoverPosition(const VariantData &coverPosition); EXPORT int64_t GetCoverPosition() const; @@ -226,6 +229,7 @@ private: string shootingModeTag_; int64_t lastVisitTime_; int32_t dynamicRangeType_; + int32_t hdrMode_; // video, audio, image int64_t dateTaken_ {0}; diff --git a/frameworks/services/media_scanner/include/scanner/scanner_utils.h b/frameworks/services/media_scanner/include/scanner/scanner_utils.h index ba94e789e7fc451048a1a69993c198bea2989dbb..35c5da5c1ded3f75aef28cba8ae28173a713619c 100644 --- a/frameworks/services/media_scanner/include/scanner/scanner_utils.h +++ b/frameworks/services/media_scanner/include/scanner/scanner_utils.h @@ -69,6 +69,7 @@ const std::string FILE_All_EXIF_DEFAULT = ""; const std::string FILE_USER_COMMENT_DEFAULT = ""; const int64_t FILE_LAST_VISIT_TIME_DEFAULT = 0; const int32_t FILE_DYNAMIC_RANGE_TYPE_DEFAULT = 0; +const int32_t FILE_HDR_MODE_DEFAULT = 0; const int32_t FILE_IS_TEMP_DEFAULT = 0; const std::string FILE_FRONT_CAMERA_DEFAULT = ""; const std::string FILE_DETAIL_TIME_DEFAULT = ""; diff --git a/frameworks/services/media_scanner/src/scanner/media_scanner_db.cpp b/frameworks/services/media_scanner/src/scanner/media_scanner_db.cpp index d92473ee88064bbd550832c1aedfeb055b139c25..31dd78a9660b81f809449f386557331f959e34ed 100644 --- a/frameworks/services/media_scanner/src/scanner/media_scanner_db.cpp +++ b/frameworks/services/media_scanner/src/scanner/media_scanner_db.cpp @@ -249,6 +249,7 @@ static void SetImageVideoValuesFromMetaDataApi10(const Metadata &metadata, Value values.PutString(PhotoColumn::PHOTO_SHOOTING_MODE_TAG, metadata.GetShootingModeTag()); values.PutLong(PhotoColumn::PHOTO_LAST_VISIT_TIME, metadata.GetLastVisitTime()); values.PutInt(PhotoColumn::PHOTO_DYNAMIC_RANGE_TYPE, metadata.GetDynamicRangeType()); + values.PutInt(PhotoColumn::PHOTO_HDR_MODE, metadata.GetHdrMode()); values.PutLong(PhotoColumn::PHOTO_COVER_POSITION, metadata.GetCoverPosition()); values.PutString(PhotoColumn::PHOTO_FRONT_CAMERA, metadata.GetFrontCamera()); values.PutString(PhotoColumn::PHOTO_DETAIL_TIME, metadata.GetDetailTime()); diff --git a/frameworks/services/media_scanner/src/scanner/metadata.cpp b/frameworks/services/media_scanner/src/scanner/metadata.cpp index 8b5218eac34ac157e9155367db844d076bbe30ff..9432a4319cdc142e7caf0095c23af19e3bc2750a 100644 --- a/frameworks/services/media_scanner/src/scanner/metadata.cpp +++ b/frameworks/services/media_scanner/src/scanner/metadata.cpp @@ -45,6 +45,7 @@ Metadata::Metadata() shootingMode_(FILE_SHOOTINGMODE_DEFAULT), lastVisitTime_(FILE_LAST_VISIT_TIME_DEFAULT), dynamicRangeType_(FILE_DYNAMIC_RANGE_TYPE_DEFAULT), + hdrMode_(FILE_HDR_MODE_DEFAULT), dateTaken_(FILE_DATE_TAKEN_DEFAULT), longitude_(FILE_LONGITUDE_DEFAULT), latitude_(FILE_LATITUDE_DEFAULT), @@ -537,6 +538,16 @@ int32_t Metadata::GetDynamicRangeType() const return dynamicRangeType_; } +void Metadata::SetHdrMode(const VariantData &type) +{ + hdrMode_ = std::get(type); +} + +int32_t Metadata::GetHdrMode() const +{ + return hdrMode_; +} + void Metadata::SetMovingPhotoImagePath(const VariantData &imagePath) { movingPhotoImagePath_ = std::get(imagePath); diff --git a/frameworks/services/media_scanner/src/scanner/metadata_extractor.cpp b/frameworks/services/media_scanner/src/scanner/metadata_extractor.cpp index f8b03f020611ae74de68d28cc7c4616c258e6ace..5da6e30fecd500a9b8a9c28d525cd28cebbd2e89 100644 --- a/frameworks/services/media_scanner/src/scanner/metadata_extractor.cpp +++ b/frameworks/services/media_scanner/src/scanner/metadata_extractor.cpp @@ -443,6 +443,8 @@ int32_t MetadataExtractor::ExtractImageMetadata(std::unique_ptr &data) if (imageSource->IsHdrImage()) { data->SetDynamicRangeType(static_cast(DynamicRangeType::HDR)); + HdrMode hdrMode = HdrMode::DEFAULT; + data->SetHdrMode(static_cast(hdrMode)); } else { data->SetDynamicRangeType(static_cast(DynamicRangeType::SDR)); } diff --git a/interfaces/inner_api/media_library_helper/include/media_column.h b/interfaces/inner_api/media_library_helper/include/media_column.h index 361264be490390a2fd831f14e6240de52fe0e02c..da4c263217eb97672e0d19ec4f51603dee06d2d9 100644 --- a/interfaces/inner_api/media_library_helper/include/media_column.h +++ b/interfaces/inner_api/media_library_helper/include/media_column.h @@ -121,6 +121,7 @@ public: static const std::string PHOTO_ALL_EXIF EXPORT; static const std::string PHOTO_CLEAN_FLAG EXPORT; static const std::string PHOTO_DYNAMIC_RANGE_TYPE EXPORT; + static const std::string PHOTO_HDR_MODE EXPORT; static const std::string MOVING_PHOTO_EFFECT_MODE EXPORT; static const std::string PHOTO_HAS_ASTC EXPORT; // This attribute has been replaced by "thumbnail_ready" static const std::string PHOTO_THUMBNAIL_READY EXPORT; diff --git a/interfaces/inner_api/media_library_helper/include/medialibrary_db_const.h b/interfaces/inner_api/media_library_helper/include/medialibrary_db_const.h index 01bbe247d2762d28ef89aa30486c1ea001adc157..1b845a24d41c48980ace64473f6d30fd8ad278b5 100644 --- a/interfaces/inner_api/media_library_helper/include/medialibrary_db_const.h +++ b/interfaces/inner_api/media_library_helper/include/medialibrary_db_const.h @@ -24,7 +24,7 @@ namespace OHOS { namespace Media { -const int32_t MEDIA_RDB_VERSION = 362; +const int32_t MEDIA_RDB_VERSION = 363; enum { VERSION_ADD_CLOUD = 2, @@ -252,6 +252,7 @@ enum { VERSION_ADD_INDEX_FOR_PHOTO_SORT_IN_ALBUM = 360, VERSION_ADD_TAB_OLD_PHOTOS_CLONE_SEQUENCE = 361, VERSION_ADD_FILE_SOURCE_TYPE = 362, + VERSION_ADD_HDR_MODE = 363, }; enum { MEDIA_API_VERSION_DEFAULT = 8, diff --git a/interfaces/inner_api/media_library_helper/include/userfile_manager_types.h b/interfaces/inner_api/media_library_helper/include/userfile_manager_types.h index 02d340145f6f65be5c6c12dfa3749f5ea3aeb78f..3c72b067ffe3ef59f196e48ed71ad9d667ed4ff2 100644 --- a/interfaces/inner_api/media_library_helper/include/userfile_manager_types.h +++ b/interfaces/inner_api/media_library_helper/include/userfile_manager_types.h @@ -159,6 +159,15 @@ enum class DynamicRangeType : int32_t { HDR }; +enum class HdrMode : int32_t { + DEFAULT = 0, + HDR_ISO_SINGLE = 1, + HDR_ISO_DUAL = 2, + HDR_CUVA = 3, + HDR_VIVID_SINGLE = 4, + HDR_VIVID_DUAL = 5, +}; + enum class MovingPhotoEffectMode : int32_t { EFFECT_MODE_START = 0, DEFAULT = EFFECT_MODE_START, diff --git a/interfaces/kits/js/include/media_library_napi.h b/interfaces/kits/js/include/media_library_napi.h index 1917523461ea5c45c8a80356dec45891b3f86cd7..72a457117aba2d6eaeb86404bbaa205bd0a040c5 100644 --- a/interfaces/kits/js/include/media_library_napi.h +++ b/interfaces/kits/js/include/media_library_napi.h @@ -305,6 +305,7 @@ private: EXPORT static napi_value CreatePhotoPermissionTypeEnum(napi_env env); EXPORT static napi_value CreateHideSensitiveTypeEnum(napi_env env); EXPORT static napi_value CreateDynamicRangeTypeEnum(napi_env env); + EXPORT static napi_value CreateHdrModeEnum(napi_env env); EXPORT static napi_value GetPhotoAccessHelper(napi_env env, napi_callback_info info); EXPORT static napi_value StartPhotoPicker(napi_env env, napi_callback_info info); @@ -441,6 +442,7 @@ private: static thread_local napi_ref sPhotoPermissionType_; static thread_local napi_ref sHideSensitiveType_; static thread_local napi_ref sDynamicRangeType_; + static thread_local napi_ref sHdrMode_; static thread_local napi_ref sNotifyType_; static thread_local napi_ref sDefaultChangeUriRef_; static thread_local napi_ref sAnalysisType_; diff --git a/interfaces/kits/js/include/napi/medialibrary_napi_enum_comm.h b/interfaces/kits/js/include/napi/medialibrary_napi_enum_comm.h index 90666b798eb481152e3888a6859af01f1002e882..ea86f4d1ae2a6d5d66661e9f1121c3d0a5a126c1 100644 --- a/interfaces/kits/js/include/napi/medialibrary_napi_enum_comm.h +++ b/interfaces/kits/js/include/napi/medialibrary_napi_enum_comm.h @@ -118,6 +118,10 @@ const std::vector dynamicRangeTypeEnum { "SDR", "HDR" }; +const std::vector hdrModeEnum { + "DEFAULT", "HDR_ISO_SINGLE", "HDR_ISO_DUAL", "HDR_CUVA", "HDR_VIVID_SINGLE", "HDR_VIVID_DUAL" +}; + const std::vector movingPhotoEffectModeEnum { "DEFAULT", "BOUNCE_PLAY", "LOOP_PLAY", "LONG_EXPOSURE", "MULTI_EXPOSURE", "CINEMA_GRAPH" }; diff --git a/interfaces/kits/js/include/napi/medialibrary_napi_utils.h b/interfaces/kits/js/include/napi/medialibrary_napi_utils.h index 3acf2de15be039cb1d04b69eb485e777573ee29d..a57c84b0364663304ab9709e127557d461ad5b9a 100644 --- a/interfaces/kits/js/include/napi/medialibrary_napi_utils.h +++ b/interfaces/kits/js/include/napi/medialibrary_napi_utils.h @@ -331,6 +331,7 @@ public: {PhotoColumn::PHOTO_SUBTYPE, {TYPE_INT32, "subtype"}}, {PhotoColumn::MOVING_PHOTO_EFFECT_MODE, {TYPE_INT32, "movingPhotoEffectMode"}}, {PhotoColumn::PHOTO_DYNAMIC_RANGE_TYPE, {TYPE_INT32, "dynamicRangeType"}}, + {PhotoColumn::PHOTO_HDR_MODE, {TYPE_INT32, "hdrMode"}}, {PhotoColumn::PHOTO_THUMBNAIL_READY, {TYPE_INT64, "thumbnailModifiedMs"}}, {PhotoColumn::PHOTO_LCD_SIZE, {TYPE_STRING, "lcdSize"}}, {PhotoColumn::PHOTO_THUMB_SIZE, {TYPE_STRING, "thmSize"}}, diff --git a/interfaces/kits/js/include/sendable/sendable_medialibrary_napi_utils.h b/interfaces/kits/js/include/sendable/sendable_medialibrary_napi_utils.h index e5a969e39a77080d436bef34d7d44a479a3d7e93..1a8127c3f588c0107db2662bac96341085140679 100644 --- a/interfaces/kits/js/include/sendable/sendable_medialibrary_napi_utils.h +++ b/interfaces/kits/js/include/sendable/sendable_medialibrary_napi_utils.h @@ -72,6 +72,7 @@ public: {PhotoColumn::PHOTO_SUBTYPE, {TYPE_INT32, "subtype"}}, {PhotoColumn::MOVING_PHOTO_EFFECT_MODE, {TYPE_INT32, "movingPhotoEffectMode"}}, {PhotoColumn::PHOTO_DYNAMIC_RANGE_TYPE, {TYPE_INT32, "dynamicRangeType"}}, + {PhotoColumn::PHOTO_HDR_MODE, {TYPE_INT32, "hdrMode"}}, {PhotoColumn::PHOTO_THUMBNAIL_READY, {TYPE_INT64, "thumbnailModifiedMs"}}, {PhotoColumn::PHOTO_LCD_SIZE, {TYPE_STRING, "lcdSize"}}, {PhotoColumn::PHOTO_THUMB_SIZE, {TYPE_STRING, "thmSize"}}, diff --git a/interfaces/kits/js/include/sendable/sendable_photo_access_helper_napi.h b/interfaces/kits/js/include/sendable/sendable_photo_access_helper_napi.h index 6fe25841daec06e681e55e597c8fd0bee3dd301d..983819e1d8daa16a51b6347290933f0ce1690ded 100644 --- a/interfaces/kits/js/include/sendable/sendable_photo_access_helper_napi.h +++ b/interfaces/kits/js/include/sendable/sendable_photo_access_helper_napi.h @@ -77,6 +77,7 @@ private: EXPORT static napi_value CreatePositionTypeEnum(napi_env env); EXPORT static napi_value CreateMovingPhotoEffectModeEnum(napi_env env); EXPORT static napi_value CreateDynamicRangeTypeEnum(napi_env env); + EXPORT static napi_value CreateHdrModeEnum(napi_env env); EXPORT static napi_value GetPhotoAccessHelper(napi_env env, napi_callback_info info); EXPORT static napi_value PhotoAccessHelperCreatePhotoAsset(napi_env env, napi_callback_info info); @@ -112,6 +113,7 @@ private: static thread_local napi_ref sHighlightAlbumChangeAttributeEnumRef_; static thread_local napi_ref sMovingPhotoEffectModeEnumRef_; static thread_local napi_ref sDynamicRangeTypeEnumRef_; + static thread_local napi_ref sHdrModeEnumRef_; static std::mutex sOnOffMutex_; }; diff --git a/services/media_cloud_sync_service/include/cloud_media_sync_const.h b/services/media_cloud_sync_service/include/cloud_media_sync_const.h index e3aa2406ce10e5775fd2259c1fff2229498fb305..e9b632eec609a680a5192be35c272d68bf4f39cb 100644 --- a/services/media_cloud_sync_service/include/cloud_media_sync_const.h +++ b/services/media_cloud_sync_service/include/cloud_media_sync_const.h @@ -197,6 +197,7 @@ const std::vector MEDIA_CLOUD_SYNC_COLUMNS = { PhotoColumn::PHOTO_SHOOTING_MODE, PhotoColumn::PHOTO_SHOOTING_MODE_TAG, PhotoColumn::PHOTO_DYNAMIC_RANGE_TYPE, + PhotoColumn::PHOTO_HDR_MODE, PhotoColumn::PHOTO_FRONT_CAMERA, PhotoColumn::PHOTO_DETAIL_TIME, PhotoColumn::PHOTO_EDIT_TIME, diff --git a/services/media_cloud_sync_service/include/dto/cloud_media_pull_data_dto.h b/services/media_cloud_sync_service/include/dto/cloud_media_pull_data_dto.h index 10452513b3cbe852b99251faabd7f0872586e536..9098c2452edd28a8ae4506111cb087083df09380 100644 --- a/services/media_cloud_sync_service/include/dto/cloud_media_pull_data_dto.h +++ b/services/media_cloud_sync_service/include/dto/cloud_media_pull_data_dto.h @@ -63,6 +63,7 @@ public: std::string attributesShootingMode; /* shooting_mode */ std::string attributesShootingModeTag; /* shooting_mode_tag */ int32_t attributesDynamicRangeType{-1}; /* dynamic_range_type */ + int32_t attributesHdrMode{-1}; /* hdr_mode */ std::string attributesFrontCamera; /* front_camera */ int64_t attributesEditTime{-1}; /* edit_time */ int32_t attributesOriginalSubtype{-1}; /* original_subtype */ diff --git a/services/media_cloud_sync_service/include/po/cloud_media_photo_po.h b/services/media_cloud_sync_service/include/po/cloud_media_photo_po.h index 07d581b7de39e477f6ec642835cec622d0a040a3..39071702aef0d6369469246a10160d883af11993 100644 --- a/services/media_cloud_sync_service/include/po/cloud_media_photo_po.h +++ b/services/media_cloud_sync_service/include/po/cloud_media_photo_po.h @@ -58,6 +58,7 @@ public: std::string shootingMode; // PhotoColumn::PHOTO_SHOOTING_MODE; std::string shootingModeTag; // PhotoColumn::PHOTO_SHOOTING_MODE_TAG; int32_t dynamicRangeType; // PhotoColumn::PHOTO_DYNAMIC_RANGE_TYPE; + int32_t hdrMode; // PhotoColumn::PHOTO_HDR_MODE; std::string frontCamera; // PhotoColumn::PHOTO_FRONT_CAMERA; std::string detailTime; // PhotoColumn::PHOTO_DETAIL_TIME; int64_t editTime; // PhotoColumn::PHOTO_EDIT_TIME; diff --git a/services/media_cloud_sync_service/include/po/cloud_media_pull_data.h b/services/media_cloud_sync_service/include/po/cloud_media_pull_data.h index c9f91a8f606415dd2457d54ee7bf32ffb61e6586..9f63e607fe37232729ce9a92d4e34baf6e459233 100644 --- a/services/media_cloud_sync_service/include/po/cloud_media_pull_data.h +++ b/services/media_cloud_sync_service/include/po/cloud_media_pull_data.h @@ -58,6 +58,7 @@ public: std::string shootingMode; // PhotoColumn::PHOTO_SHOOTING_MODE; std::string shootingModeTag; // PhotoColumn::PHOTO_SHOOTING_MODE_TAG; int32_t dynamicRangeType; // PhotoColumn::PHOTO_DYNAMIC_RANGE_TYPE; + int32_t hdrMode; // PhotoColumn::PHOTO_HDR_MODE; std::string frontCamera; // PhotoColumn::PHOTO_FRONT_CAMERA; std::string detailTime; // PhotoColumn::PHOTO_DETAIL_TIME; int64_t editTime; // PhotoColumn::PHOTO_EDIT_TIME; diff --git a/services/media_cloud_sync_service/include/utils/cloud_sync_convert.h b/services/media_cloud_sync_service/include/utils/cloud_sync_convert.h index 9b9bf8218d8f7832e0e53f27ab550421ce589e6d..ce6dc233c4a81ed723414391a94b3a9fe5a9836f 100644 --- a/services/media_cloud_sync_service/include/utils/cloud_sync_convert.h +++ b/services/media_cloud_sync_service/include/utils/cloud_sync_convert.h @@ -48,6 +48,7 @@ public: static int32_t CompensateAttShootingMode(const CloudMediaPullDataDto &data, NativeRdb::ValuesBucket &values); static int32_t CompensateAttShootingModeTag(const CloudMediaPullDataDto &data, NativeRdb::ValuesBucket &values); static int32_t CompensateAttDynamicRangeType(const CloudMediaPullDataDto &data, NativeRdb::ValuesBucket &values); + static int32_t CompensateAttHdrMode(const CloudMediaPullDataDto &data, NativeRdb::ValuesBucket &values); static int32_t CompensateAttFrontCamera(const CloudMediaPullDataDto &data, NativeRdb::ValuesBucket &values); static int32_t CompensateAttEditTime(const CloudMediaPullDataDto &data, NativeRdb::ValuesBucket &values); static int32_t CompensateAttOriginalSubtype(const CloudMediaPullDataDto &data, NativeRdb::ValuesBucket &values); diff --git a/services/media_cloud_sync_service/include/vo/cloud_mdkrecord_photos_vo.h b/services/media_cloud_sync_service/include/vo/cloud_mdkrecord_photos_vo.h index 49d8c00c853cb95d1e598cea7b6fbb53bcb04d87..62554bb831b9cf0c6c89cc1a1487f3d9a6131007 100644 --- a/services/media_cloud_sync_service/include/vo/cloud_mdkrecord_photos_vo.h +++ b/services/media_cloud_sync_service/include/vo/cloud_mdkrecord_photos_vo.h @@ -44,6 +44,7 @@ public: std::string shootingMode; std::string shootingModeTag; int32_t dynamicRangeType; + int32_t hdrMode; std::string frontCamera; int64_t editTime; int32_t originalSubtype; diff --git a/services/media_cloud_sync_service/include/vo/on_fetch_photos_vo.h b/services/media_cloud_sync_service/include/vo/on_fetch_photos_vo.h index 71ce5feb9c508cf17829b424cb1a2faae829ff55..2a0985611cca8f6987b9901cb88404b341f2cefc 100644 --- a/services/media_cloud_sync_service/include/vo/on_fetch_photos_vo.h +++ b/services/media_cloud_sync_service/include/vo/on_fetch_photos_vo.h @@ -62,6 +62,7 @@ public: int32_t subtype; int32_t originalSubtype; int32_t dynamicRangeType; + int32_t hdrMode; int32_t movingPhotoEffectMode; int32_t supportedWatermarkType; int32_t strongAssociation; diff --git a/services/media_cloud_sync_service/src/controller/processor/cloud_media_photo_controller_processor.cpp b/services/media_cloud_sync_service/src/controller/processor/cloud_media_photo_controller_processor.cpp index 317418f153fe54d13dd41ad80ea39a9f23853791..5edc6907f2cd17ad57fea021c7b93ecf2738b488 100644 --- a/services/media_cloud_sync_service/src/controller/processor/cloud_media_photo_controller_processor.cpp +++ b/services/media_cloud_sync_service/src/controller/processor/cloud_media_photo_controller_processor.cpp @@ -140,6 +140,7 @@ bool CloudMediaPhotoControllerProcessor::GetAttributesInfo(const PhotosPo &recor photosVo.shootingMode = record.shootingMode.value_or(""); photosVo.shootingModeTag = record.shootingModeTag.value_or(""); photosVo.dynamicRangeType = record.dynamicRangeType.value_or(0); + photosVo.hdrMode = record.hdrMode.value_or(0); photosVo.frontCamera = record.frontCamera.value_or(""); photosVo.originalSubtype = record.originalSubtype.value_or(0); photosVo.coverPosition = record.coverPosition.value_or(0); @@ -237,6 +238,7 @@ bool CloudMediaPhotoControllerProcessor::GetAttributesInfo(const OnFetchPhotosVo data.attributesSubtype = photosVo.subtype; data.attributesOriginalSubtype = photosVo.originalSubtype; data.attributesDynamicRangeType = photosVo.dynamicRangeType; + data.attributesHdrMode = photosVo.hdrMode; data.attributesFrontCamera = photosVo.frontCamera; data.attributesMovingPhotoEffectMode = photosVo.movingPhotoEffectMode; data.attributesCoverPosition = photosVo.coverPosition; diff --git a/services/media_cloud_sync_service/src/dto/cloud_media_pull_data_dto.cpp b/services/media_cloud_sync_service/src/dto/cloud_media_pull_data_dto.cpp index baed611b2ff53a8904a31dbd827026c757ba274e..08aa58f66f8b0086e8e9cebb8d6d79c48cf6db15 100644 --- a/services/media_cloud_sync_service/src/dto/cloud_media_pull_data_dto.cpp +++ b/services/media_cloud_sync_service/src/dto/cloud_media_pull_data_dto.cpp @@ -56,6 +56,7 @@ void CloudMediaPullDataDto::GetAttributesInfo(std::stringstream &ss) const << "\"attributesShootingMode\": \"" << attributesShootingMode << "\"," << "\"attributesShootingModeTag\": \"" << attributesShootingModeTag << "\"," << "\"attributesDynamicRangeType\": " << attributesDynamicRangeType << "," + << "\"attributesHdrMode\": " << attributesHdrMode << "," << "\"attributesFrontCamera\": " << attributesFrontCamera << "," << "\"attributesEditTime\": " << attributesEditTime << "," << "\"attributesOriginalSubtype\": " << attributesOriginalSubtype << "," diff --git a/services/media_cloud_sync_service/src/utils/cloud_sync_convert.cpp b/services/media_cloud_sync_service/src/utils/cloud_sync_convert.cpp index cf8d76767c24eb1bdc7e12aa12af0fdc92ec69b1..7ae37ebeb1f1c9c9423448ee0e896026abf2c8fa 100644 --- a/services/media_cloud_sync_service/src/utils/cloud_sync_convert.cpp +++ b/services/media_cloud_sync_service/src/utils/cloud_sync_convert.cpp @@ -199,6 +199,16 @@ int32_t CloudSyncConvert::CompensateAttDynamicRangeType( return E_OK; } +int32_t CloudSyncConvert::CompensateAttHdrMode( + const CloudMediaPullDataDto &data, NativeRdb::ValuesBucket &values) +{ + int32_t hdrMode = data.attributesHdrMode; + CHECK_AND_RETURN_RET_WARN_LOG( + hdrMode != -1, E_CLOUDSYNC_INVAL_ARG, "Cannot find attributes::hdrMode."); + values.PutInt(PhotoColumn::PHOTO_HDR_MODE, hdrMode); + return E_OK; +} + int32_t CloudSyncConvert::CompensateAttFrontCamera(const CloudMediaPullDataDto &data, NativeRdb::ValuesBucket &values) { std::string frontCamera = data.attributesFrontCamera; @@ -588,6 +598,7 @@ int32_t CloudSyncConvert::ExtractAttributeValue(const CloudMediaPullDataDto &dat CompensateAttShootingMode(data, values); CompensateAttShootingModeTag(data, values); CompensateAttDynamicRangeType(data, values); + CompensateAttHdrMode(data, values); CompensateAttFrontCamera(data, values); CompensateAttEditTime(data, values); CompensateAttOriginalSubtype(data, values); diff --git a/services/media_cloud_sync_service/src/vo/cloud_mdkrecord_photos_vo.cpp b/services/media_cloud_sync_service/src/vo/cloud_mdkrecord_photos_vo.cpp index d15c8ae1523febf965ae08b7074c36ae57d8dc58..98d3062b6b609fed19f2287e16dbe8417627fd13 100644 --- a/services/media_cloud_sync_service/src/vo/cloud_mdkrecord_photos_vo.cpp +++ b/services/media_cloud_sync_service/src/vo/cloud_mdkrecord_photos_vo.cpp @@ -42,6 +42,7 @@ bool CloudMdkRecordPhotosVo::MarshallingBasicInfo(Parcel &parcel) const parcel.WriteString(shootingMode); parcel.WriteString(shootingModeTag); parcel.WriteInt32(dynamicRangeType); + parcel.WriteInt32(hdrMode); parcel.WriteString(frontCamera); parcel.WriteInt64(editTime); parcel.WriteInt32(originalSubtype); // @@ -104,6 +105,7 @@ bool CloudMdkRecordPhotosVo::ReadBasicInfo(Parcel &parcel) parcel.ReadString(shootingMode); parcel.ReadString(shootingModeTag); parcel.ReadInt32(dynamicRangeType); + parcel.ReadInt32(hdrMode); parcel.ReadString(frontCamera); parcel.ReadInt64(editTime); parcel.ReadInt32(originalSubtype); @@ -218,6 +220,7 @@ void CloudMdkRecordPhotosVo::GetAttributesInfo(std::stringstream &ss) const << "\"shootingMode\": \"" << shootingMode << "\"," << "\"shootingModeTag\": \"" << shootingModeTag << "\"," << "\"dynamicRangeType\": " << dynamicRangeType << "," + << "\"hdrMode\": " << hdrMode << "," << "\"frontCamera\": \"" << frontCamera << "\"," << "\"coverPosition\": " << coverPosition << "," << "\"isRectificationCover\": " << isRectificationCover << "," diff --git a/services/media_cloud_sync_service/src/vo/on_fetch_photos_vo.cpp b/services/media_cloud_sync_service/src/vo/on_fetch_photos_vo.cpp index 974a46b82695b689cbe69354f7c9baabb44d650f..9608e7cbafa098ebc16d7c56eb1bf45bd5fe8e20 100644 --- a/services/media_cloud_sync_service/src/vo/on_fetch_photos_vo.cpp +++ b/services/media_cloud_sync_service/src/vo/on_fetch_photos_vo.cpp @@ -63,6 +63,7 @@ bool OnFetchPhotosVo::MarshallingAttributesInfo(Parcel &parcel) const parcel.WriteInt32(this->subtype); parcel.WriteInt32(this->originalSubtype); parcel.WriteInt32(this->dynamicRangeType); + parcel.WriteInt32(this->hdrMode); parcel.WriteInt32(this->movingPhotoEffectMode); parcel.WriteInt32(this->supportedWatermarkType); parcel.WriteInt32(this->strongAssociation); @@ -126,6 +127,7 @@ bool OnFetchPhotosVo::ReadAttributesInfo(Parcel &parcel) parcel.ReadInt32(this->subtype); parcel.ReadInt32(this->originalSubtype); parcel.ReadInt32(this->dynamicRangeType); + parcel.ReadInt32(this->hdrMode); parcel.ReadInt32(this->movingPhotoEffectMode); parcel.ReadInt32(this->supportedWatermarkType); parcel.ReadInt32(this->strongAssociation);