From 266abf64f664e614b21205086ec50a3ca0e9e45d Mon Sep 17 00:00:00 2001 From: linjun9528 <423341654@qq.com> Date: Tue, 18 Jul 2023 11:18:18 +0800 Subject: [PATCH] Resolve camera rotation and mirroring issues Signed-off-by: linjun9528 <423341654@qq.com> --- services/camera_service/BUILD.gn | 2 + .../camera_service/src/hstream_capture.cpp | 2 +- .../camera_service/src/hstream_repeat.cpp | 99 ++++++++++--------- 3 files changed, 56 insertions(+), 47 deletions(-) diff --git a/services/camera_service/BUILD.gn b/services/camera_service/BUILD.gn index 5c259d9..1774285 100644 --- a/services/camera_service/BUILD.gn +++ b/services/camera_service/BUILD.gn @@ -54,6 +54,7 @@ ohos_shared_library("camera_service") { "//foundation/multimedia/camera_framework/interfaces/inner_api/native/camera/include", "//foundation/window/window_manager/interfaces/innerkits/dm", "//base/security/access_token/interfaces/innerkits/accesstoken/include", + "//base/startup/init/interfaces/innerkits/include/syspara/", ] if (target_cpu == "arm") { @@ -66,6 +67,7 @@ ohos_shared_library("camera_service") { "//foundation/graphic/graphic_2d:libsurface", "//foundation/graphic/graphic_2d/rosen/modules/render_service_client:librender_service_client", "//foundation/window/window_manager/dm:libdm", + "//base/startup/init/interfaces/innerkits:libbegetutil", ] external_deps = [ diff --git a/services/camera_service/src/hstream_capture.cpp b/services/camera_service/src/hstream_capture.cpp index 3042488..f198fbc 100644 --- a/services/camera_service/src/hstream_capture.cpp +++ b/services/camera_service/src/hstream_capture.cpp @@ -72,7 +72,7 @@ int32_t HStreamCapture::Capture(const std::shared_ptr finalSetting; diff --git a/services/camera_service/src/hstream_repeat.cpp b/services/camera_service/src/hstream_repeat.cpp index a153e15..3e07a9e 100644 --- a/services/camera_service/src/hstream_repeat.cpp +++ b/services/camera_service/src/hstream_repeat.cpp @@ -20,13 +20,14 @@ #include "display.h" #include "display_manager.h" #include "camera_log.h" +#include "parameters.h" namespace OHOS { namespace CameraStandard { -static const int32_t STREAM_ROTATE_90 = 90; -static const int32_t STREAM_ROTATE_180 = 180; -static const int32_t STREAM_ROTATE_270 = 270; -static const int32_t STREAM_ROTATE_360 = 360; +// static const int32_t STREAM_ROTATE_90 = 90; +// static const int32_t STREAM_ROTATE_180 = 180; +// static const int32_t STREAM_ROTATE_270 = 270; +// static const int32_t STREAM_ROTATE_360 = 360; HStreamRepeat::HStreamRepeat( sptr producer, int32_t format, int32_t width, int32_t height, bool isVideo) @@ -219,50 +220,56 @@ void HStreamRepeat::SetStreamTransform() auto display = OHOS::Rosen::DisplayManager::GetInstance().GetDefaultDisplay(); if ((display->GetWidth() < display->GetHeight()) && (producer_ != nullptr)) { ret = SurfaceError::SURFACE_ERROR_OK; - int32_t streamRotation = sensorOrientation; - if (cameraPosition == OHOS_CAMERA_POSITION_FRONT) { - switch (streamRotation) { - case STREAM_ROTATE_90: { - ret = producer_->SetTransform(GRAPHIC_FLIP_H_ROT90); - break; - } - case STREAM_ROTATE_180: { - ret = producer_->SetTransform(GRAPHIC_FLIP_H_ROT180); - break; - } - case STREAM_ROTATE_270: { - ret = producer_->SetTransform(GRAPHIC_FLIP_H_ROT270); - break; - } - default: { - break; - } - } - MEDIA_INFO_LOG("HStreamRepeat::SetStreamTransform filp rotate %{public}d", streamRotation); + uint32_t cameraId = OHOS::system::GetUintParameter("persist.camera.device.cameraid", 0); + if (cameraId == 0) { // 后置 + ret = producer_->SetTransform(GRAPHIC_ROTATE_270); } else { - streamRotation = STREAM_ROTATE_360 - sensorOrientation; - switch (streamRotation) { - case STREAM_ROTATE_90: { - ret = producer_->SetTransform(GRAPHIC_ROTATE_90); - break; - } - case STREAM_ROTATE_180: { - ret = producer_->SetTransform(GRAPHIC_ROTATE_180); - break; - } - case STREAM_ROTATE_270: { - ret = producer_->SetTransform(GRAPHIC_ROTATE_270); - break; - } - default: { - break; - } - } - MEDIA_INFO_LOG("HStreamRepeat::SetStreamTransform not flip rotate %{public}d", streamRotation); - } - if (ret != SurfaceError::SURFACE_ERROR_OK) { - MEDIA_ERR_LOG("HStreamRepeat::SetStreamTransform failed %{public}d", ret); + ret = producer_->SetTransform(GRAPHIC_FLIP_V_ROT90); } + // int32_t streamRotation = sensorOrientation; + // if (cameraPosition == OHOS_CAMERA_POSITION_FRONT) { + // switch (streamRotation) { + // case STREAM_ROTATE_90: { + // ret = producer_->SetTransform(GRAPHIC_FLIP_H_ROT90); + // break; + // } + // case STREAM_ROTATE_180: { + // ret = producer_->SetTransform(GRAPHIC_FLIP_H_ROT180); + // break; + // } + // case STREAM_ROTATE_270: { + // ret = producer_->SetTransform(GRAPHIC_FLIP_H_ROT270); + // break; + // } + // default: { + // break; + // } + // } + // MEDIA_INFO_LOG("HStreamRepeat::SetStreamTransform filp rotate %{public}d", streamRotation); + // } else { + // streamRotation = STREAM_ROTATE_360 - sensorOrientation; + // switch (streamRotation) { + // case STREAM_ROTATE_90: { + // ret = producer_->SetTransform(GRAPHIC_ROTATE_90); + // break; + // } + // case STREAM_ROTATE_180: { + // ret = producer_->SetTransform(GRAPHIC_ROTATE_180); + // break; + // } + // case STREAM_ROTATE_270: { + // ret = producer_->SetTransform(GRAPHIC_ROTATE_270); + // break; + // } + // default: { + // break; + // } + // } + // MEDIA_INFO_LOG("HStreamRepeat::SetStreamTransform not flip rotate %{public}d", streamRotation); + // } + // if (ret != SurfaceError::SURFACE_ERROR_OK) { + // MEDIA_ERR_LOG("HStreamRepeat::SetStreamTransform failed %{public}d", ret); + // } } } } // namespace Standard -- Gitee