diff --git a/services/camera_service/include/hcamera_device.h b/services/camera_service/include/hcamera_device.h index bd743d3af3ba2e6cac0c1e1a68226d8351d70605..2f0e4ef43b5ec61ef3d4efa5664fd4572667e4cd 100644 --- a/services/camera_service/include/hcamera_device.h +++ b/services/camera_service/include/hcamera_device.h @@ -190,7 +190,8 @@ private: void DebugLogForAeExposureCompensation(const std::shared_ptr &settings, uint32_t tag); void DebugLogForBeautyAuto(const std::shared_ptr &settings, uint32_t tag); - void UpdateMuteSetting(); + void CreateMuteSetting(std::shared_ptr& settings); + int32_t UpdateDeviceSetting(); }; } // namespace CameraStandard } // namespace OHOS diff --git a/services/camera_service/src/hcamera_device.cpp b/services/camera_service/src/hcamera_device.cpp index 97eadb1c926e02c81b5911192fc3ef98fc175285..d5fef363ea5224fb18e5e8f06a15d53ac5f87af2 100644 --- a/services/camera_service/src/hcamera_device.cpp +++ b/services/camera_service/src/hcamera_device.cpp @@ -116,16 +116,14 @@ void HCameraDevice::SetDeviceMuteMode(bool muteMode) deviceMuteMode_ = muteMode; } -void HCameraDevice::UpdateMuteSetting() +void HCameraDevice::CreateMuteSetting(std::shared_ptr& settings) { constexpr int32_t DEFAULT_ITEMS = 1; constexpr int32_t DEFAULT_DATA_LENGTH = 1; int32_t count = 1; uint8_t mode = OHOS_CAMERA_MUTE_MODE_SOLID_COLOR_BLACK; - std::shared_ptr stashMetadata = - std::make_shared(DEFAULT_ITEMS, DEFAULT_DATA_LENGTH); - stashMetadata->addEntry(OHOS_CONTROL_MUTE_MODE, &mode, count); - UpdateSetting(stashMetadata); + settings = std::make_shared(DEFAULT_ITEMS, DEFAULT_DATA_LENGTH); + settings->addEntry(OHOS_CONTROL_MUTE_MODE, &mode, count); } int32_t HCameraDevice::ResetDeviceSettings() @@ -147,7 +145,9 @@ int32_t HCameraDevice::ResetDeviceSettings() } else { ResetCachedSettings(); if (deviceMuteMode_) { - UpdateMuteSetting(); + std::shared_ptr settings = nullptr; + CreateMuteSetting(settings); + UpdateSetting(settings); } } } @@ -344,23 +344,41 @@ int32_t HCameraDevice::OpenDevice(bool isEnableSecCam) if (hdiCameraDevice_ != nullptr) { cameraHostManager_->AddCameraDevice(cameraID_, this); if (updateSettings_ != nullptr) { - std::vector setting; - OHOS::Camera::MetadataUtils::ConvertMetadataToVec(updateSettings_, setting); - ReportMetadataDebugLog(updateSettings_); - CamRetCode rc = (CamRetCode)(hdiCameraDevice_->UpdateSettings(setting)); - if (rc != HDI::Camera::V1_0::NO_ERROR) { - MEDIA_ERR_LOG("HCameraDevice::OpenDevice Update setting failed with error Code: %{public}d", rc); - return HdiToServiceError(rc); + errorCode = UpdateDeviceSetting(); + if (errorCode != CAMERA_OK) { + return errorCode; } - updateSettings_ = nullptr; - MEDIA_DEBUG_LOG("HCameraDevice::Open Updated device settings"); errorCode = HdiToServiceError((CamRetCode)(hdiCameraDevice_->SetResultMode(ON_CHANGED))); + } else { + if (deviceMuteMode_) { + CreateMuteSetting(updateSettings_); + errorCode = UpdateDeviceSetting(); + if (errorCode != CAMERA_OK) { + return errorCode; + } + errorCode = HdiToServiceError((CamRetCode)(hdiCameraDevice_->SetResultMode(ON_CHANGED))); + } } } OpenDeviceNext(); return errorCode; } +int32_t HCameraDevice::UpdateDeviceSetting() +{ + std::vector setting; + OHOS::Camera::MetadataUtils::ConvertMetadataToVec(updateSettings_, setting); + ReportMetadataDebugLog(updateSettings_); + CamRetCode rc = (CamRetCode)(hdiCameraDevice_->UpdateSettings(setting)); + if (rc != HDI::Camera::V1_0::NO_ERROR) { + MEDIA_ERR_LOG("HCameraDevice::OpenDevice Update setting failed with error Code: %{public}d", rc); + return HdiToServiceError(rc); + } + updateSettings_ = nullptr; + MEDIA_DEBUG_LOG("HCameraDevice::Open Updated device settings"); + return CAMERA_OK; +} + void HCameraDevice::OpenDeviceNext() { bool isFoldable = OHOS::Rosen::DisplayManager::GetInstance().IsFoldable();