From 9edbbc8060f7d54452e42e973cf3d383e9f363ca Mon Sep 17 00:00:00 2001 From: xzcbob Date: Thu, 11 Sep 2025 15:08:59 +0800 Subject: [PATCH] =?UTF-8?q?hdrvivid=20=E9=9C=80=E6=B1=82=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: xzcbob --- .../ani/ets/@ohos.file.photoAccessHelper.ets | 11 +++ .../ani/src/cpp/media_library_enum_ani.cpp | 23 ++++++ frameworks/ani/src/include/ani_class_name.h | 1 + .../ani/src/include/media_library_enum_ani.h | 1 + .../src/include/medialibrary_ani_enum_comm.h | 6 ++ .../ani/src/include/medialibrary_ani_utils.h | 1 + .../include/mdk_record_photos_data.h | 2 + .../cloud_file_data_convert.cpp | 2 + .../src/mdk_record_photos_data.cpp | 9 +++ .../include/media_image_framework_utils.h | 2 + .../media_library_helper/src/fetch_result.cpp | 1 + .../media_library_helper/src/media_column.cpp | 3 + .../src/media_image_framework_utils.cpp | 19 +++++ .../include/medialibrary_data_manager.h | 2 + .../include/medialibrary_subscriber.h | 1 + .../include/orm/media_column_type.h | 1 + .../include/orm/photos_po_writer.h | 7 ++ .../include/orm/po/photos_po.h | 2 + .../src/medialibrary_album_fusion_utils.cpp | 1 + .../src/medialibrary_asset_operations.cpp | 1 + .../src/medialibrary_data_manager.cpp | 71 +++++++++++++++++++ .../src/medialibrary_rdbstore.cpp | 16 +++++ .../src/medialibrary_subscriber.cpp | 30 ++++++++ .../photo_custom_restore_operation.cpp | 1 + .../include/utils/cloud_data_utils.h | 3 + .../include/base_restore.h | 1 + .../include/clone_restore.h | 2 + .../src/base_restore.cpp | 25 +++++++ .../src/clone_restore.cpp | 23 ++++++ .../src/cloud_backup_restore.cpp | 1 + .../src/others_clone_restore.cpp | 1 + .../src/upgrade_restore.cpp | 1 + .../media_scanner/include/scanner/metadata.h | 4 ++ .../include/scanner/scanner_utils.h | 1 + .../src/scanner/media_scanner_db.cpp | 1 + .../media_scanner/src/scanner/metadata.cpp | 11 +++ .../src/scanner/metadata_extractor.cpp | 2 + .../include/media_column.h | 1 + .../include/medialibrary_db_const.h | 3 +- .../include/userfile_manager_types.h | 9 +++ .../kits/js/include/media_library_napi.h | 2 + .../napi/medialibrary_napi_enum_comm.h | 4 ++ .../js/include/napi/medialibrary_napi_utils.h | 1 + .../sendable_medialibrary_napi_utils.h | 1 + .../sendable_photo_access_helper_napi.h | 2 + .../include/cloud_media_sync_const.h | 1 + .../include/dto/cloud_media_pull_data_dto.h | 1 + .../include/po/cloud_media_photo_po.h | 1 + .../include/po/cloud_media_pull_data.h | 1 + .../include/utils/cloud_sync_convert.h | 1 + .../include/vo/cloud_mdkrecord_photos_vo.h | 1 + .../include/vo/on_fetch_photos_vo.h | 1 + ...cloud_media_photo_controller_processor.cpp | 2 + .../src/dto/cloud_media_pull_data_dto.cpp | 1 + .../src/utils/cloud_sync_convert.cpp | 11 +++ .../src/vo/cloud_mdkrecord_photos_vo.cpp | 3 + .../src/vo/on_fetch_photos_vo.cpp | 2 + 57 files changed, 338 insertions(+), 1 deletion(-) diff --git a/frameworks/ani/ets/@ohos.file.photoAccessHelper.ets b/frameworks/ani/ets/@ohos.file.photoAccessHelper.ets index 9e59ef1f30..ada7d74761 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 e8a094ce12..384a8780af 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 0a4360a161..0ea3995923 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 7f41666c86..86530e3ffc 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 10269ab42d..6bd3b42c9a 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 6390c0b070..995353a074 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 b5cf6d8382..6cfaabde6b 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 a86d6ac092..a9627efdb0 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 e4902a6ec7..11f2909c2f 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 7b1835cd8a..f39c755812 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 5579a2e628..cf8bab6830 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 c506edbf87..cb369e43c3 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 682159e47b..ad18f61ffe 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 57c5ba0c22..1a915115a8 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 b35f302399..5fe7d3722a 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 42530443cc..7912110ffb 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 66e19710b9..3d0a9747fa 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 5e1dce2b0d..67be92c0a9 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 b961bb5853..3126e72ffa 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 6c68b9a0e0..7d74b20423 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 55c13a3ad1..4b65ec7570 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 a129711999..c4486cef55 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 dc2d681d88..04906c5fc2 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 518d897cc2..d1bd056af2 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 47b4ccc73f..5265621512 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 377377b411..cfc3eb4086 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 bdff66c5a7..962bb80c7a 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 771385eff6..8795839f38 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 641599c93f..912c347664 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 0b779138dd..7a8cae9694 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 2350a275f1..4ecc273d74 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 1aa58aa694..9f82023d1d 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 77b482b02b..0eefc6aee0 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 ba94e789e7..35c5da5c1d 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 d92473ee88..31dd78a966 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 8b5218eac3..9432a4319c 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 f8b03f0206..5da6e30fec 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 361264be49..da4c263217 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 01bbe247d2..1b845a24d4 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 02d340145f..3c72b067ff 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 1917523461..72a457117a 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 90666b798e..ea86f4d1ae 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 3acf2de15b..a57c84b036 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 e5a969e39a..1a8127c3f5 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 6fe25841da..983819e1d8 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 e3aa2406ce..e9b632eec6 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 10452513b3..9098c2452e 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 07d581b7de..39071702ae 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 c9f91a8f60..9f63e607fe 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 9b9bf8218d..ce6dc233c4 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 49d8c00c85..62554bb831 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 71ce5feb9c..2a0985611c 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 317418f153..5edc6907f2 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 baed611b2f..08aa58f66f 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 cf8d76767c..7ae37ebeb1 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 d15c8ae152..98d3062b6b 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 974a46b826..9608e7cbaf 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); -- Gitee