From 14152a49cedcdb63679936f7320f3d06fc7ea19c Mon Sep 17 00:00:00 2001 From: w30048789 Date: Sat, 6 Sep 2025 16:17:56 +0800 Subject: [PATCH] record system stream force switch tag Signed-off-by: w30048789 --- .../include/dcamera_provider/dcamera_provider.h | 3 +++ .../hdi_service/src/dcamera_device/dcamera_device.cpp | 11 ++++++++++- .../src/dcamera_provider/dcamera_provider.cpp | 11 +++++++++++ .../src/dstream_operator/dstream_operator.cpp | 8 ++++++++ 4 files changed, 32 insertions(+), 1 deletion(-) diff --git a/distributed_camera/hdi_service/include/dcamera_provider/dcamera_provider.h b/distributed_camera/hdi_service/include/dcamera_provider/dcamera_provider.h index faf2f4a388..30a2f4218b 100644 --- a/distributed_camera/hdi_service/include/dcamera_provider/dcamera_provider.h +++ b/distributed_camera/hdi_service/include/dcamera_provider/dcamera_provider.h @@ -55,6 +55,8 @@ public: int32_t StartCapture(const DHBase &dhBase, const std::vector &captureInfos); int32_t StopCapture(const DHBase &dhBase, const std::vector &streamIds); int32_t UpdateSettings(const DHBase &dhBase, const std::vector &settings); + bool IsForceSwitch(); + int32_t SetForceSwitch(bool forceSwitch); private: bool IsDCameraSettingsInvalid(const DCameraSettings& result); @@ -77,6 +79,7 @@ private: }; static AutoRelease autoRelease_; static OHOS::sptr instance_; + bool isForceSwitch_ = false; }; } // namespace DistributedHardware } // namespace OHOS diff --git a/distributed_camera/hdi_service/src/dcamera_device/dcamera_device.cpp b/distributed_camera/hdi_service/src/dcamera_device/dcamera_device.cpp index 2c1fc880d7..1d93b8bdf5 100644 --- a/distributed_camera/hdi_service/src/dcamera_device/dcamera_device.cpp +++ b/distributed_camera/hdi_service/src/dcamera_device/dcamera_device.cpp @@ -235,7 +235,15 @@ int32_t DCameraDevice::UpdateSettings(const std::vector& settings) DHLOGE("Distributed camera provider instance is null."); return CamRetCode::DEVICE_ERROR; } - int32_t ret = provider->UpdateSettings(dhBase_, dcSettings); + camera_metadata_item_t forceSwitchItem; + int32_t ret = OHOS::Camera::FindCameraMetadataItem(updateSettings->get(), + OHOS_CONTROL_REQUEST_CAMERA_SWITCH, &forceSwitchItem); + if (ret == CAM_META_SUCCESS) { + bool isForceSwitch = (bool)forceSwitchItem.data.u8[0]; + DHLOGI("isForceSwitch: %d", isForceSwitch); + provider->SetForceSwitch(isForceSwitch); + } + ret = provider->UpdateSettings(dhBase_, dcSettings); return MapToExternalRetCode(static_cast(ret)); } @@ -361,6 +369,7 @@ int32_t DCameraDevice::Close() dCameraStreamOperator_ = nullptr; } if (provider != nullptr) { + provider->SetForceSwitch(false); provider->CloseSession(dhBase_); } if (dMetadataProcessor_ != nullptr) { diff --git a/distributed_camera/hdi_service/src/dcamera_provider/dcamera_provider.cpp b/distributed_camera/hdi_service/src/dcamera_provider/dcamera_provider.cpp index 351ab48cef..cd067556bd 100644 --- a/distributed_camera/hdi_service/src/dcamera_provider/dcamera_provider.cpp +++ b/distributed_camera/hdi_service/src/dcamera_provider/dcamera_provider.cpp @@ -412,6 +412,17 @@ int32_t DCameraProvider::UpdateSettings(const DHBase &dhBase, const std::vector< return callback->UpdateSettings(dhBase, settings); } +bool DCameraProvider::IsForceSwitch() +{ + return isForceSwitch_; +} + +int32_t DCameraProvider::SetForceSwitch(bool forceSwitch) +{ + isForceSwitch_ = forceSwitch; + return DCamRetCode::SUCCESS; +} + bool DCameraProvider::IsDCameraSettingsInvalid(const DCameraSettings& result) { return result.value_.empty() || result.value_.length() > SETTING_VALUE_MAX_LENGTH; diff --git a/distributed_camera/hdi_service/src/dstream_operator/dstream_operator.cpp b/distributed_camera/hdi_service/src/dstream_operator/dstream_operator.cpp index a7d826b7ed..d3e3ef79fc 100644 --- a/distributed_camera/hdi_service/src/dstream_operator/dstream_operator.cpp +++ b/distributed_camera/hdi_service/src/dstream_operator/dstream_operator.cpp @@ -168,6 +168,13 @@ int32_t DStreamOperator::ExtractStreamInfo(std::vector& dCameraStr DHLOGE("No stream to extract."); return CamRetCode::INVALID_ARGUMENT; } + OHOS::sptr dProvider = DCameraProvider::GetInstance(); + if (dProvider == nullptr) { + DHLOGE("DCameraProvider not init."); + return CamRetCode::DEVICE_ERROR; + } + bool isForceSwitch = dProvider->IsForceSwitch(); + DHLOGI("IsForceSwitch: %d", isForceSwitch); for (auto streamInfo : dcStreamInfoMap_) { if (streamInfo.second == nullptr) { DHLOGE("Stream info is null."); @@ -183,6 +190,7 @@ int32_t DStreamOperator::ExtractStreamInfo(std::vector& dCameraStr dstStreamInfo.encodeType_ = streamInfo.second->encodeType_; dstStreamInfo.type_ = streamInfo.second->type_; dstStreamInfo.mode_ = currentOperMode_; + dstStreamInfo.isForceSwitch_ = isForceSwitch; dCameraStreams.push_back(dstStreamInfo); } return CamRetCode::NO_ERROR; -- Gitee