From cbb4a84c0ccc59c07ea1b458719aef5f53161335 Mon Sep 17 00:00:00 2001 From: w30076694 Date: Wed, 27 Aug 2025 08:56:02 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=BB=E8=BE=91=E7=9B=B8=E6=9C=BA=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E6=8A=98=E5=8F=A0=E7=8A=B6=E6=80=81=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: w30076694 --- .../native/camera/base/src/input/camera_input.cpp | 1 - services/camera_service/include/camera_util.h | 4 ++-- services/camera_service/include/hcamera_device.h | 1 + services/camera_service/src/camera_util.cpp | 12 +++++++----- services/camera_service/src/hcamera_device.cpp | 7 +++++-- services/camera_service/src/hstream_operator.cpp | 5 ++--- 6 files changed, 17 insertions(+), 13 deletions(-) diff --git a/frameworks/native/camera/base/src/input/camera_input.cpp b/frameworks/native/camera/base/src/input/camera_input.cpp index 732ce4d7b..16b0f12b6 100644 --- a/frameworks/native/camera/base/src/input/camera_input.cpp +++ b/frameworks/native/camera/base/src/input/camera_input.cpp @@ -141,7 +141,6 @@ void CameraInput::InitCameraInput() CHECK_RETURN_ELOG(metaData == nullptr, "CameraInput::InitCameraInput failed get metaData"); camera_metadata_item item; - CHECK_RETURN_ELOG(metaData == nullptr, "InitCameraInput Metadata is Nullptr"); int32_t retCode = OHOS::Camera::FindCameraMetadataItem(metaData->get(), OHOS_SENSOR_ORIENTATION, &item); CHECK_EXECUTE(retCode == CAM_META_SUCCESS && item.count, staticOrientation_ = static_cast(item.data.i32[0])); diff --git a/services/camera_service/include/camera_util.h b/services/camera_service/include/camera_util.h index 1c2bf98d0..8aae7f418 100644 --- a/services/camera_service/include/camera_util.h +++ b/services/camera_service/include/camera_util.h @@ -252,9 +252,9 @@ std::string GetValidCameraId(std::string& cameraId); std::string ControlCenterMapToString(const std::map> &data); std::map> StringToControlCenterMap(const std::string& str); int32_t GetCorrectedCameraOrientation(bool usePhysicalCameraOrientation, - std::shared_ptr cameraAbility, int32_t& sensorOrientation); + std::shared_ptr cameraAbility, int32_t& sensorOrientation, int32_t displayMode = -1); int32_t GetPhysicalCameraOrientation(std::shared_ptr cameraAbility, - int32_t& sensorOrientation); + int32_t& sensorOrientation, int32_t displayMode = -1); } // namespace CameraStandard } // namespace OHOS #endif // OHOS_CAMERA_UTIL_H diff --git a/services/camera_service/include/hcamera_device.h b/services/camera_service/include/hcamera_device.h index d56364b39..ecc307a87 100644 --- a/services/camera_service/include/hcamera_device.h +++ b/services/camera_service/include/hcamera_device.h @@ -311,6 +311,7 @@ private: int32_t focusMode_ = -1; bool focusStatus_ = false; int32_t videoStabilizationMode_ = 0; + int32_t lastDisplayMode_ = -1; bool usePhysicalCameraOrientation_ = false; }; } // namespace CameraStandard diff --git a/services/camera_service/src/camera_util.cpp b/services/camera_service/src/camera_util.cpp index 29d458eb5..e25b7a8b3 100644 --- a/services/camera_service/src/camera_util.cpp +++ b/services/camera_service/src/camera_util.cpp @@ -655,12 +655,13 @@ std::map> StringToContr } int32_t GetPhysicalCameraOrientation(std::shared_ptr cameraAbility, - int32_t& sensorOrientation) + int32_t& sensorOrientation, int32_t displayMode) { int32_t curFoldStatus; camera_metadata_item item; - OHOS::Rosen::FoldDisplayMode displayMode = OHOS::Rosen::DisplayManager::GetInstance().GetFoldDisplayMode(); - if (displayMode == OHOS::Rosen::FoldDisplayMode::GLOBAL_FULL) { + displayMode = displayMode >= 0 ? displayMode : + static_cast(OHOS::Rosen::DisplayManager::GetInstance().GetFoldDisplayMode()); + if (displayMode == static_cast(OHOS::Rosen::FoldDisplayMode::GLOBAL_FULL)) { curFoldStatus = static_cast(OHOS::Rosen::FoldStatus::FOLD_STATE_EXPAND_WITH_SECOND_EXPAND); } else { curFoldStatus = static_cast(OHOS::Rosen::DisplayManager::GetInstance().GetFoldStatus()); @@ -685,11 +686,12 @@ int32_t GetPhysicalCameraOrientation(std::shared_ptr cameraAbility, int32_t& sensorOrientation) + std::shared_ptr cameraAbility, int32_t& sensorOrientation, int32_t displayMode) { int32_t ret = CAM_META_FAILURE; CHECK_RETURN_RET(cameraAbility == nullptr, ret); - CHECK_EXECUTE(usePhysicalCameraOrientation, ret = GetPhysicalCameraOrientation(cameraAbility, sensorOrientation)); + CHECK_EXECUTE(usePhysicalCameraOrientation, ret = + GetPhysicalCameraOrientation(cameraAbility, sensorOrientation, displayMode)); if (ret != CAM_META_SUCCESS) { camera_metadata_item item; ret = OHOS::Camera::FindCameraMetadataItem(cameraAbility->get(), OHOS_SENSOR_ORIENTATION, &item); diff --git a/services/camera_service/src/hcamera_device.cpp b/services/camera_service/src/hcamera_device.cpp index 9de1a3717..2e2e89793 100644 --- a/services/camera_service/src/hcamera_device.cpp +++ b/services/camera_service/src/hcamera_device.cpp @@ -1080,11 +1080,14 @@ void HCameraDevice::UpdateCameraRotateAngle() { CHECK_RETURN(!IsPhysicalCameraOrientationVariable()); bool isFoldable = OHOS::Rosen::DisplayManager::GetInstance().IsFoldable(); - CHECK_RETURN(!isFoldable || deviceAbility_ == nullptr); + int32_t displayMode = static_cast(OHOS::Rosen::DisplayManager::GetInstance().GetFoldDisplayMode()); + CHECK_RETURN(!isFoldable || deviceAbility_ == nullptr || displayMode == lastDisplayMode_); + lastDisplayMode_ = displayMode; int cameraOrientation = GetOriginalCameraOrientation(); CHECK_RETURN(cameraOrientation == -1); int32_t truthCameraOrientation = -1; - int32_t ret = GetCorrectedCameraOrientation(!usePhysicalCameraOrientation_, deviceAbility_, truthCameraOrientation); + int32_t ret = GetCorrectedCameraOrientation(!usePhysicalCameraOrientation_, deviceAbility_, + truthCameraOrientation, displayMode); CHECK_RETURN(ret != CAM_META_SUCCESS || truthCameraOrientation == -1); int32_t rotateDegree = (truthCameraOrientation - cameraOrientation + BASE_DEGREE) % BASE_DEGREE; MEDIA_DEBUG_LOG("HCameraDevice::UpdateCameraRotateAngle cameraOrientation: %{public}d, truthCameraOrientation: " diff --git a/services/camera_service/src/hstream_operator.cpp b/services/camera_service/src/hstream_operator.cpp index 39153af5b..09c1d57f7 100644 --- a/services/camera_service/src/hstream_operator.cpp +++ b/services/camera_service/src/hstream_operator.cpp @@ -404,6 +404,8 @@ int32_t HStreamOperator::LinkInputAndOutputs(const std::shared_ptr allStreamInfos; auto allStream = streamContainer_.GetAllStreams(); for (auto& stream : allStream) { + CHECK_RETURN_RET_ELOG(cameraDevice_ == nullptr, 0, "HStreamOperator::LinkInputAndOutputs cameraDevice is null"); + stream->SetUsePhysicalCameraOrientation(cameraDevice_->GetUsePhysicalCameraOrientation()); SetBasicInfo(stream); rc = stream->LinkInput(streamOperator_, settings); CHECK_RETURN_RET_ELOG(rc != CAMERA_OK, rc, "HStreamOperator::LinkInputAndOutputs IsValidMode false"); @@ -422,9 +424,6 @@ int32_t HStreamOperator::LinkInputAndOutputs(const std::shared_ptrSetStreamInfo(curStreamInfo); CHECK_EXECUTE(stream->GetStreamType() != StreamType::METADATA, allStreamInfos.push_back(curStreamInfo)); - CHECK_RETURN_RET_ELOG(cameraDevice_ == nullptr, 0, "HStreamOperator::GetMovingPhotoBufferDuration() " - "cameraDevice is null"); - stream->SetUsePhysicalCameraOrientation(cameraDevice_->GetUsePhysicalCameraOrientation()); } rc = CreateAndCommitStreams(allStreamInfos, settings, opMode); -- Gitee