From 512e19cae3b9937b01d489b9549444ed4da786eb Mon Sep 17 00:00:00 2001 From: vv Date: Tue, 26 Aug 2025 10:30:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=9F=B3=E7=94=BB=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: vv --- .../constants/dcamera_ipc_interface_code.h | 1 + .../include/dcamera_source_handler.h | 15 ++++ .../include/distributed_camera_source_proxy.h | 3 + .../include/idistributed_camera_source.h | 2 + .../src/dcamera_source_handler.cpp | 14 ++++ .../src/distributed_camera_source_proxy.cpp | 40 ++++++++++ .../dcamera_source_handler_test.cpp | 19 +++++ .../distributed_camera_source_service.h | 2 + .../distributed_camera_source_stub.h | 2 + .../distributedcameramgr/dcamera_source_dev.h | 1 + .../dcameradata/dcamera_source_data_process.h | 3 +- .../dcameradata/dcamera_source_input.h | 1 + .../dcameradata/dcamera_stream_data_process.h | 1 + .../dcamera_stream_data_process_producer.h | 10 ++- .../dcamerainterface/icamera_input.h | 2 + .../icamera_source_data_process.h | 2 + .../distributed_camera_source_service.cpp | 15 ++++ .../distributed_camera_source_stub.cpp | 38 +++++++++ .../dcamera_source_dev.cpp | 8 ++ .../dcamera_source_data_process.cpp | 17 +++- .../dcameradata/dcamera_source_input.cpp | 14 ++++ .../dcamera_stream_data_process.cpp | 18 +++++ .../dcamera_stream_data_process_producer.cpp | 22 +++++- ...distributed_camera_source_service_test.cpp | 16 ++++ .../distributed_camera_source_stub_test.cpp | 79 +++++++++++++++++++ .../mock_distributed_camera_source_stub.h | 8 ++ .../dcamera_source_data_process_test.cpp | 29 +++++++ .../dcamera_source_dev_test.cpp | 17 ++++ .../dcamera_source_input_test.cpp | 27 +++++++ ...mera_stream_data_process_producer_test.cpp | 1 + .../dcamera_stream_data_process_test.cpp | 29 +++++++ .../mock_dcamera_source_input.h | 4 + 32 files changed, 455 insertions(+), 5 deletions(-) diff --git a/common/include/constants/dcamera_ipc_interface_code.h b/common/include/constants/dcamera_ipc_interface_code.h index d18d37dd..98b494e6 100644 --- a/common/include/constants/dcamera_ipc_interface_code.h +++ b/common/include/constants/dcamera_ipc_interface_code.h @@ -27,6 +27,7 @@ enum class IDCameraSourceInterfaceCode : uint32_t { REGISTER_DISTRIBUTED_HARDWARE = 2, UNREGISTER_DISTRIBUTED_HARDWARE = 3, CAMERA_NOTIFY = 4, + UPDATE_WORKMODE = 5 }; /* SAID: 4804 */ diff --git a/interfaces/inner_kits/native_cpp/camera_source/include/dcamera_source_handler.h b/interfaces/inner_kits/native_cpp/camera_source/include/dcamera_source_handler.h index 99bd109d..8258a167 100644 --- a/interfaces/inner_kits/native_cpp/camera_source/include/dcamera_source_handler.h +++ b/interfaces/inner_kits/native_cpp/camera_source/include/dcamera_source_handler.h @@ -29,6 +29,19 @@ namespace OHOS { namespace DistributedHardware { + +struct SyncShareData { + volatile int lock; + uint64_t audio_current_pts; + uint64_t audio_update_clock; + float audio_speed; + uint64_t video_current_pts; + uint64_t video_update_clock; + float video_speed; + uint64_t sync_strategy; + bool reset; +}; + class DCameraSourceHandler : public IDistributedHardwareSource { DECLARE_SINGLE_INSTANCE_BASE(DCameraSourceHandler); public: @@ -47,6 +60,8 @@ public: int32_t LoadDistributedHDF(std::shared_ptr callback) override; int32_t UnLoadDistributedHDF() override; void SetSAState(); + int32_t UpdateDistributedHardwareWorkMode(const std::string& devId, const std::string& dhId, + const WorkModeParam& param) override; private: typedef enum { DCAMERA_SA_STATE_STOP = 0, diff --git a/interfaces/inner_kits/native_cpp/camera_source/include/distributed_camera_source_proxy.h b/interfaces/inner_kits/native_cpp/camera_source/include/distributed_camera_source_proxy.h index 356735e0..25255691 100644 --- a/interfaces/inner_kits/native_cpp/camera_source/include/distributed_camera_source_proxy.h +++ b/interfaces/inner_kits/native_cpp/camera_source/include/distributed_camera_source_proxy.h @@ -41,12 +41,15 @@ public: int32_t UnregisterDistributedHardware(const std::string& devId, const std::string& dhId, const std::string& reqId) override; int32_t DCameraNotify(const std::string& devId, const std::string& dhId, std::string& events) override; + int32_t UpdateDistributedHardwareWorkMode(const std::string& devId, const std::string& dhId, + const WorkModeParam& param) override; private: bool CheckRegParams(const std::string& devId, const std::string& dhId, const std::string& reqId, const EnableParam& param); bool CheckUnregParams(const std::string& devId, const std::string& dhId, const std::string& reqId); bool CheckNotifyParams(const std::string& devId, const std::string& dhId, std::string& events); + bool CheckUpdateParams(const std::string& devId, const std::string& dhId, const WorkModeParam& param); static inline BrokerDelegator delegator_; const size_t PARAM_MAX_SIZE = 50 * 1024 * 1024; diff --git a/interfaces/inner_kits/native_cpp/camera_source/include/idistributed_camera_source.h b/interfaces/inner_kits/native_cpp/camera_source/include/idistributed_camera_source.h index 8a36f339..f5c821ee 100644 --- a/interfaces/inner_kits/native_cpp/camera_source/include/idistributed_camera_source.h +++ b/interfaces/inner_kits/native_cpp/camera_source/include/idistributed_camera_source.h @@ -35,6 +35,8 @@ public: virtual int32_t UnregisterDistributedHardware(const std::string& devId, const std::string& dhId, const std::string& reqId) = 0; virtual int32_t DCameraNotify(const std::string& devId, const std::string& dhId, std::string& events) = 0; + virtual int32_t UpdateDistributedHardwareWorkMode(const std::string& devId, const std::string& dhId, + const WorkModeParam& param) = 0; }; } // namespace DistributedHardware } // namespace OHOS diff --git a/interfaces/inner_kits/native_cpp/camera_source/src/dcamera_source_handler.cpp b/interfaces/inner_kits/native_cpp/camera_source/src/dcamera_source_handler.cpp index 732c5817..6ec9ddff 100644 --- a/interfaces/inner_kits/native_cpp/camera_source/src/dcamera_source_handler.cpp +++ b/interfaces/inner_kits/native_cpp/camera_source/src/dcamera_source_handler.cpp @@ -228,6 +228,20 @@ void DCameraSourceHandler::SetSAState() state_ = DCAMERA_SA_STATE_STOP; } +int32_t DCameraSourceHandler::UpdateDistributedHardwareWorkMode(const std::string& devId, const std::string& dhId, + const WorkModeParam& param) +{ + DHLOGI("update camera workmode, devId: %{public}s dhId: %{public}s", GetAnonyString(devId).c_str(), + GetAnonyString(dhId).c_str()); + sptr dCameraSourceSrv = DCameraSourceHandlerIpc::GetInstance().GetSourceLocalCamSrv(); + CHECK_AND_RETURN_RET_LOG(dCameraSourceSrv == nullptr, DCAMERA_BAD_VALUE, "get service failed"); + int32_t ret = dCameraSourceSrv->UpdateDistributedHardwareWorkMode(devId, dhId, param); + if (ret != DCAMERA_OK) { + DHLOGE("update camera workmode failed, ret:%{public}d", ret); + } + return ret; +} + IDistributedHardwareSource *GetSourceHardwareHandler() { DHLOGI("DCameraSourceHandler GetSourceHardwareHandler Start"); diff --git a/interfaces/inner_kits/native_cpp/camera_source/src/distributed_camera_source_proxy.cpp b/interfaces/inner_kits/native_cpp/camera_source/src/distributed_camera_source_proxy.cpp index b42201ef..f47896ee 100644 --- a/interfaces/inner_kits/native_cpp/camera_source/src/distributed_camera_source_proxy.cpp +++ b/interfaces/inner_kits/native_cpp/camera_source/src/distributed_camera_source_proxy.cpp @@ -226,5 +226,45 @@ bool DistributedCameraSourceProxy::CheckNotifyParams(const std::string& devId, c } return true; } + +int32_t DistributedCameraSourceProxy::UpdateDistributedHardwareWorkMode(const std::string& devId, + const std::string& dhId, const WorkModeParam& param) +{ + DHLOGI("devId: %{public}s dhId: %{public}s", GetAnonyString(devId).c_str(), GetAnonyString(dhId).c_str()); + if (!CheckUpdateParams(devId, dhId, param)) { + DHLOGE("workmode param is invalid"); + return DCAMERA_BAD_VALUE; + } + sptr remote = Remote(); + CHECK_AND_RETURN_RET_LOG(remote == nullptr, DCAMERA_BAD_VALUE, "remote service is null"); + MessageParcel data; + MessageParcel reply; + MessageOption option; + if (!data.WriteInterfaceToken(DistributedCameraSourceProxy::GetDescriptor())) { + DHLOGE("write token failed"); + return DCAMERA_BAD_VALUE; + } + bool writeRet = !data.WriteString(devId) || !data.WriteString(dhId) || !data.WriteFileDescriptor(param.fd) + || !data.WriteInt32(param.sharedMemLen) || !data.WriteInt32(param.scene) || !data.WriteInt32(param.isAVsync); + CHECK_AND_RETURN_RET_LOG(writeRet, DCAMERA_BAD_VALUE, "write params failed"); + remote->SendRequest(static_cast(IDCameraSourceInterfaceCode::UPDATE_WORKMODE), + data, reply, option); + int32_t result = reply.ReadInt32(); + return result; +} + +bool DistributedCameraSourceProxy::CheckUpdateParams(const std::string& devId, const std::string& dhId, + const WorkModeParam& param) +{ + if (devId.empty() || devId.size() > DID_MAX_SIZE || dhId.empty() || dhId.size() > DID_MAX_SIZE) { + DHLOGE("input params is invalid"); + return false; + } + if (param.fd < 0 || param.sharedMemLen < 0) { + DHLOGE("workmode param is invalid"); + return false; + } + return true; +} } // namespace DistributedHardware } // namespace OHOS diff --git a/interfaces/inner_kits/native_cpp/test/unittest/common/camera_source/dcamera_source_handler_test.cpp b/interfaces/inner_kits/native_cpp/test/unittest/common/camera_source/dcamera_source_handler_test.cpp index d72a7d4b..3712fe7b 100644 --- a/interfaces/inner_kits/native_cpp/test/unittest/common/camera_source/dcamera_source_handler_test.cpp +++ b/interfaces/inner_kits/native_cpp/test/unittest/common/camera_source/dcamera_source_handler_test.cpp @@ -187,5 +187,24 @@ HWTEST_F(DCameraSourceHandlerTest, dcamera_source_handler_test_006, TestSize.Lev int32_t ret = DCameraSourceHandler::GetInstance().InitSource(params); EXPECT_EQ(DCAMERA_OK, ret); } + +/** + * @tc.name: dcamera_source_handler_test_007 + * @tc.desc: Verify the UpdateDistributedHardwareWorkMode function. + * @tc.type: FUNC + * @tc.require: issue + */ +HWTEST_F(DCameraSourceHandlerTest, dcamera_source_handler_test_007, TestSize.Level0) +{ + std::string devId = TEST_DEVICE_ID; + std::string dhId = TEST_CAMERA_DH_ID_0; + WorkModeParam param(-1, 0, 0, false); + int32_t ret = DCameraSourceHandler::GetInstance().UpdateDistributedHardwareWorkMode(devId, dhId, param); + EXPECT_EQ(DCAMERA_BAD_VALUE, ret); + param.fd = 12; + param.sharedMemLen = 120; + ret = DCameraSourceHandler::GetInstance().UpdateDistributedHardwareWorkMode(devId, dhId, param); + EXPECT_NE(DCAMERA_OK, ret); +} } } \ No newline at end of file diff --git a/services/cameraservice/sourceservice/include/distributedcamera/distributed_camera_source_service.h b/services/cameraservice/sourceservice/include/distributedcamera/distributed_camera_source_service.h index d8429673..1714fcad 100644 --- a/services/cameraservice/sourceservice/include/distributedcamera/distributed_camera_source_service.h +++ b/services/cameraservice/sourceservice/include/distributedcamera/distributed_camera_source_service.h @@ -57,6 +57,8 @@ public: static void CamDevErase(DCameraIndex& index); static uint32_t GetCamDevNum(); void StartHicollieThread(); + int32_t UpdateDistributedHardwareWorkMode(const std::string& devId, const std::string& dhId, + const WorkModeParam& param) override; protected: void OnStart() override; diff --git a/services/cameraservice/sourceservice/include/distributedcamera/distributed_camera_source_stub.h b/services/cameraservice/sourceservice/include/distributedcamera/distributed_camera_source_stub.h index 99df7ea9..7bf242a2 100644 --- a/services/cameraservice/sourceservice/include/distributedcamera/distributed_camera_source_stub.h +++ b/services/cameraservice/sourceservice/include/distributedcamera/distributed_camera_source_stub.h @@ -34,12 +34,14 @@ private: int32_t ReleaseSourceInner(MessageParcel &data, MessageParcel &reply); int32_t RegisterDistributedHardwareInner(MessageParcel &data, MessageParcel &reply); int32_t UnregisterDistributedHardwareInner(MessageParcel &data, MessageParcel &reply); + int32_t UpdateDCameraWorkModeInner(MessageParcel &data, MessageParcel &reply); int32_t DCameraNotifyInner(MessageParcel &data, MessageParcel &reply); bool CheckRegParams(const std::string& devId, const std::string& dhId, const std::string& reqId, const EnableParam& param); bool CheckUnregParams(const std::string& devId, const std::string& dhId, const std::string& reqId); bool CheckNotifyParams(const std::string& devId, const std::string& dhId, std::string& events); bool HasEnableDHPermission(); + bool CheckUpdateParams(const std::string& devId, const std::string& dhId, const WorkModeParam& param); using DCameraFunc = int32_t (DistributedCameraSourceStub::*)(MessageParcel &data, MessageParcel &reply); std::map memberFuncMap_; diff --git a/services/cameraservice/sourceservice/include/distributedcameramgr/dcamera_source_dev.h b/services/cameraservice/sourceservice/include/distributedcameramgr/dcamera_source_dev.h index 15484d23..4d637668 100644 --- a/services/cameraservice/sourceservice/include/distributedcameramgr/dcamera_source_dev.h +++ b/services/cameraservice/sourceservice/include/distributedcameramgr/dcamera_source_dev.h @@ -70,6 +70,7 @@ public: bool GetHicollieFlag(); int32_t GetFullCaps(); void SetTokenId(uint64_t token); + int32_t UpdateDCameraWorkMode(const WorkModeParam& param); class DCameraSourceDevEventHandler : public AppExecFwk::EventHandler { public: diff --git a/services/cameraservice/sourceservice/include/distributedcameramgr/dcameradata/dcamera_source_data_process.h b/services/cameraservice/sourceservice/include/distributedcameramgr/dcameradata/dcamera_source_data_process.h index c92b3c17..2a6ce8ae 100644 --- a/services/cameraservice/sourceservice/include/distributedcameramgr/dcameradata/dcamera_source_data_process.h +++ b/services/cameraservice/sourceservice/include/distributedcameramgr/dcameradata/dcamera_source_data_process.h @@ -40,10 +40,11 @@ public: int32_t StopCapture(std::vector& streamIds) override; int32_t GetProducerSize() override; void GetAllStreamIds(std::vector& streamIds) override; + int32_t UpdateProducerWorkMode(std::vector& streamIds, const WorkModeParam& param) override; private: void DestroyPipeline(); - + private: std::mutex streamMutex_; std::vector> streamProcess_; diff --git a/services/cameraservice/sourceservice/include/distributedcameramgr/dcameradata/dcamera_source_input.h b/services/cameraservice/sourceservice/include/distributedcameramgr/dcameradata/dcamera_source_input.h index 14e1473f..acee169b 100644 --- a/services/cameraservice/sourceservice/include/distributedcameramgr/dcameradata/dcamera_source_input.h +++ b/services/cameraservice/sourceservice/include/distributedcameramgr/dcameradata/dcamera_source_input.h @@ -43,6 +43,7 @@ public: int32_t Init() override; int32_t UnInit() override; int32_t UpdateSettings(std::vector>& settings) override; + int32_t UpdateWorkMode(const WorkModeParam& param) override; void OnSessionState(DCStreamType streamType, int32_t state); void OnSessionError(DCStreamType streamType, int32_t eventType, int32_t eventReason, std::string detail); diff --git a/services/cameraservice/sourceservice/include/distributedcameramgr/dcameradata/dcamera_stream_data_process.h b/services/cameraservice/sourceservice/include/distributedcameramgr/dcameradata/dcamera_stream_data_process.h index 8be56c23..b1aeb13d 100644 --- a/services/cameraservice/sourceservice/include/distributedcameramgr/dcameradata/dcamera_stream_data_process.h +++ b/services/cameraservice/sourceservice/include/distributedcameramgr/dcameradata/dcamera_stream_data_process.h @@ -45,6 +45,7 @@ public: void OnProcessedVideoBuffer(const std::shared_ptr& videoResult); void OnError(const DataProcessErrorType errorType); void DestroyPipeline(); + int32_t UpdateProducerWorkMode(std::vector& streamIds, const WorkModeParam& param); private: void FeedStreamToSnapShot(const std::shared_ptr& buffer); diff --git a/services/cameraservice/sourceservice/include/distributedcameramgr/dcameradata/dcamera_stream_data_process_producer.h b/services/cameraservice/sourceservice/include/distributedcameramgr/dcameradata/dcamera_stream_data_process_producer.h index 6a45d1d3..a53be2a7 100644 --- a/services/cameraservice/sourceservice/include/distributedcameramgr/dcameradata/dcamera_stream_data_process_producer.h +++ b/services/cameraservice/sourceservice/include/distributedcameramgr/dcameradata/dcamera_stream_data_process_producer.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2023 Huawei Device Co., Ltd. + * Copyright (c) 2021-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -21,11 +21,13 @@ #include #include #include +#include #include "data_buffer.h" #include "event_handler.h" #include "v1_1/id_camera_provider.h" #include "dcamera_feeding_smoother.h" +#include "idistributed_camera_source.h" namespace OHOS { namespace DistributedHardware { @@ -44,6 +46,7 @@ public: void Stop(); void FeedStream(const std::shared_ptr& buffer); virtual void OnSmoothFinished(const std::shared_ptr& data) override; + void UpdateProducerWorkMode(const WorkModeParam& param); private: void StartEvent(); @@ -75,6 +78,11 @@ private: sptr camHdiProvider_; std::unique_ptr smoother_ = nullptr; std::shared_ptr smootherListener_ = nullptr; + + WorkModeParam workModeParam_; + std::mutex workModeParamMtx_; + + sptr syncMem_ = nullptr; }; } // namespace DistributedHardware } // namespace OHOS diff --git a/services/cameraservice/sourceservice/include/distributedcameramgr/dcamerainterface/icamera_input.h b/services/cameraservice/sourceservice/include/distributedcameramgr/dcamerainterface/icamera_input.h index 8d4e8051..e2683df0 100644 --- a/services/cameraservice/sourceservice/include/distributedcameramgr/dcamerainterface/icamera_input.h +++ b/services/cameraservice/sourceservice/include/distributedcameramgr/dcamerainterface/icamera_input.h @@ -16,6 +16,7 @@ #ifndef OHOS_ICAMERA_INPUT_H #define OHOS_ICAMERA_INPUT_H +#include "idistributed_camera_source.h" #include "v1_1/dcamera_types.h" namespace OHOS { @@ -36,6 +37,7 @@ public: virtual int32_t Init() = 0; virtual int32_t UnInit() = 0; virtual int32_t UpdateSettings(std::vector>& settings) = 0; + virtual int32_t UpdateWorkMode(const WorkModeParam& param) = 0; }; } // namespace DistributedHardware } // namespace OHOS diff --git a/services/cameraservice/sourceservice/include/distributedcameramgr/dcamerainterface/icamera_source_data_process.h b/services/cameraservice/sourceservice/include/distributedcameramgr/dcamerainterface/icamera_source_data_process.h index 84e5182e..bb12592e 100644 --- a/services/cameraservice/sourceservice/include/distributedcameramgr/dcamerainterface/icamera_source_data_process.h +++ b/services/cameraservice/sourceservice/include/distributedcameramgr/dcamerainterface/icamera_source_data_process.h @@ -18,6 +18,7 @@ #include +#include "idistributed_camera_source.h" #include "data_buffer.h" #include "v1_1/dcamera_types.h" @@ -63,6 +64,7 @@ public: virtual int32_t StopCapture(std::vector& streamIds) = 0; virtual int32_t GetProducerSize() = 0; virtual void GetAllStreamIds(std::vector& streamIds) = 0; + virtual int32_t UpdateProducerWorkMode(std::vector& streamIds, const WorkModeParam& param) = 0; }; } // namespace DistributedHardware } // namespace OHOS diff --git a/services/cameraservice/sourceservice/src/distributedcamera/distributed_camera_source_service.cpp b/services/cameraservice/sourceservice/src/distributedcamera/distributed_camera_source_service.cpp index efeaa435..86cbbeae 100644 --- a/services/cameraservice/sourceservice/src/distributedcamera/distributed_camera_source_service.cpp +++ b/services/cameraservice/sourceservice/src/distributedcamera/distributed_camera_source_service.cpp @@ -443,5 +443,20 @@ void DistributedCameraSourceService::StartHicollieThread() } // LCOV_EXCL_STOP } + +int32_t DistributedCameraSourceService::UpdateDistributedHardwareWorkMode(const std::string& devId, + const std::string& dhId, const WorkModeParam& param) +{ + DHLOGI("update camera workmode, networkId: %{public}s, dhId: %{public}s", GetAnonyString(devId).c_str(), + GetAnonyString(dhId).c_str()); + DCameraIndex camIndex(devId, dhId); + int32_t ret = DCAMERA_OK; + std::shared_ptr camDev = GetCamDevByIndex(camIndex); + + CHECK_AND_RETURN_RET_LOG(camDev == nullptr, DCAMERA_NOT_FOUND, "can not found device"); + ret = camDev->UpdateDCameraWorkMode(param); + DHLOGI("update camera workmode done,ret:%{public}d", ret); + return ret; +} } // namespace DistributedHardware } // namespace OHOS diff --git a/services/cameraservice/sourceservice/src/distributedcamera/distributed_camera_source_stub.cpp b/services/cameraservice/sourceservice/src/distributedcamera/distributed_camera_source_stub.cpp index 16c23999..3f59d724 100644 --- a/services/cameraservice/sourceservice/src/distributedcamera/distributed_camera_source_stub.cpp +++ b/services/cameraservice/sourceservice/src/distributedcamera/distributed_camera_source_stub.cpp @@ -37,6 +37,8 @@ DistributedCameraSourceStub::DistributedCameraSourceStub() : IRemoteStub(true) &DistributedCameraSourceStub::UnregisterDistributedHardwareInner; memberFuncMap_[static_cast(IDCameraSourceInterfaceCode::CAMERA_NOTIFY)] = &DistributedCameraSourceStub::DCameraNotifyInner; + memberFuncMap_[static_cast(IDCameraSourceInterfaceCode::UPDATE_WORKMODE)] = + &DistributedCameraSourceStub::UpdateDCameraWorkModeInner; } DistributedCameraSourceStub::~DistributedCameraSourceStub() @@ -73,6 +75,8 @@ int32_t DistributedCameraSourceStub::OnRemoteRequest(uint32_t code, MessageParce return UnregisterDistributedHardwareInner(data, reply); case static_cast(IDCameraSourceInterfaceCode::CAMERA_NOTIFY): return DCameraNotifyInner(data, reply); + case static_cast(IDCameraSourceInterfaceCode::UPDATE_WORKMODE): + return UpdateDCameraWorkModeInner(data, reply); default: DHLOGE("Invalid OnRemoteRequest code=%{public}d", code); return IPCObjectStub::OnRemoteRequest(code, data, reply, option); @@ -253,5 +257,39 @@ bool DistributedCameraSourceStub::CheckNotifyParams(const std::string& devId, co } return true; } + +int32_t DistributedCameraSourceStub::UpdateDCameraWorkModeInner(MessageParcel &data, MessageParcel &reply) +{ + DHLOGD("update dcamera workmode"); + int32_t ret = DCAMERA_OK; + do { + std::string devId = data.ReadString(); + std::string dhId = data.ReadString(); + WorkModeParam params(-1, 0, 0, false); + params.fd = data.ReadFileDescriptor(); + params.sharedMemLen = data.ReadInt32(); + params.scene = data.ReadInt32(); + params.isAVsync = static_cast(data.ReadInt32()); + if (!CheckUpdateParams(devId, dhId, params)) { + DHLOGE("input param is invalid"); + ret = DCAMERA_BAD_VALUE; + break; + } + ret = UpdateDistributedHardwareWorkMode(devId, dhId, params); + DHLOGI("DistributedCameraSourceStub UpdateDistributedHardwareWorkMode %{public}d", ret); + } while (0); + reply.WriteInt32(ret); + return ret; +} + +bool DistributedCameraSourceStub::CheckUpdateParams(const std::string& devId, const std::string& dhId, + const WorkModeParam& param) +{ + bool ret = devId.empty() || devId.size() > DID_MAX_SIZE || dhId.empty() || dhId.size() > DID_MAX_SIZE; + CHECK_AND_RETURN_RET_LOG(ret, false, "input params is invalid"); + ret = param.fd < 0 || param.sharedMemLen < 0; + CHECK_AND_RETURN_RET_LOG(ret, false, "workmode param is invalid"); + return true; +} } // namespace DistributedHardware } // namespace OHOS diff --git a/services/cameraservice/sourceservice/src/distributedcameramgr/dcamera_source_dev.cpp b/services/cameraservice/sourceservice/src/distributedcameramgr/dcamera_source_dev.cpp index fe2dd9ef..fca426f9 100644 --- a/services/cameraservice/sourceservice/src/distributedcameramgr/dcamera_source_dev.cpp +++ b/services/cameraservice/sourceservice/src/distributedcameramgr/dcamera_source_dev.cpp @@ -885,5 +885,13 @@ void DCameraSourceDev::SetTokenId(uint64_t token) { tokenId_ = token; } + +int32_t DCameraSourceDev::UpdateDCameraWorkMode(const WorkModeParam& param) +{ + CHECK_AND_RETURN_RET_LOG(input_ == nullptr, DCAMERA_BAD_VALUE, "input_ is nullptr"); + int32_t ret = input_->UpdateWorkMode(param); + DHLOGI("update dcamera workmode by input_ done, ret %{public}d", ret); + return ret; +} } // namespace DistributedHardware } // namespace OHOS diff --git a/services/cameraservice/sourceservice/src/distributedcameramgr/dcameradata/dcamera_source_data_process.cpp b/services/cameraservice/sourceservice/src/distributedcameramgr/dcameradata/dcamera_source_data_process.cpp index c2b676bc..98522b59 100644 --- a/services/cameraservice/sourceservice/src/distributedcameramgr/dcameradata/dcamera_source_data_process.cpp +++ b/services/cameraservice/sourceservice/src/distributedcameramgr/dcameradata/dcamera_source_data_process.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2021-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -216,5 +216,20 @@ void DCameraSourceDataProcess::GetAllStreamIds(std::vector& streamIds) { streamIds.assign(streamIds_.begin(), streamIds_.end()); } + +int32_t DCameraSourceDataProcess::UpdateProducerWorkMode(std::vector& streamIds, const WorkModeParam& param) +{ + DHLOGI("DCameraSourceDataProcess UpdateProducerWorkMode devId %{public}s dhId %{public}s", + GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str()); + int32_t ret = DCAMERA_OK; + for (auto iter = streamProcess_.begin(); iter != streamProcess_.end(); iter++) { + int32_t currentRet = (*iter)->UpdateProducerWorkMode(streamIds, param); + if (currentRet != DCAMERA_OK) { + DHLOGE("DCameraSourceDataProcess UpdateProducerWorkMode failed, ret:%{public}d", currentRet); + ret = currentRet; + } + } + return ret; +} } // namespace DistributedHardware } // namespace OHOS diff --git a/services/cameraservice/sourceservice/src/distributedcameramgr/dcameradata/dcamera_source_input.cpp b/services/cameraservice/sourceservice/src/distributedcameramgr/dcameradata/dcamera_source_input.cpp index 294ab4d2..36ac4a8c 100644 --- a/services/cameraservice/sourceservice/src/distributedcameramgr/dcameradata/dcamera_source_input.cpp +++ b/services/cameraservice/sourceservice/src/distributedcameramgr/dcameradata/dcamera_source_input.cpp @@ -506,5 +506,19 @@ int32_t DCameraSourceInput::EstablishSnapshotFrameSession(std::vector streamIds; + auto dataprocess = dataProcess_.find(CONTINUOUS_FRAME); + CHECK_AND_RETURN_RET_LOG(dataprocess == dataProcess_.end(), DCAMERA_BAD_OPERATE, "can not find continuous frame"); + CHECK_AND_RETURN_RET_LOG(dataprocess->second == nullptr, DCAMERA_BAD_OPERATE, "dataprocess->second is nullptr"); + dataprocess->second->GetAllStreamIds(streamIds); + int32_t ret = dataprocess->second->UpdateProducerWorkMode(streamIds, param); + DHLOGI("update continue stream workmode finished, ret:%{public}d", ret); + return ret; +} } // namespace DistributedHardware } // namespace OHOS diff --git a/services/cameraservice/sourceservice/src/distributedcameramgr/dcameradata/dcamera_stream_data_process.cpp b/services/cameraservice/sourceservice/src/distributedcameramgr/dcameradata/dcamera_stream_data_process.cpp index 361a08f3..7d231ef6 100644 --- a/services/cameraservice/sourceservice/src/distributedcameramgr/dcameradata/dcamera_stream_data_process.cpp +++ b/services/cameraservice/sourceservice/src/distributedcameramgr/dcameradata/dcamera_stream_data_process.cpp @@ -308,5 +308,23 @@ Videoformat DCameraStreamDataProcess::GetPipelineFormat(int32_t format) } return videoFormat; } + +int32_t DCameraStreamDataProcess::UpdateProducerWorkMode(std::vector& streamIds, const WorkModeParam& param) +{ + std::lock_guard autoLock(producerMutex_); + for (auto iter = streamIds.begin(); iter != streamIds.end(); iter++) { + uint32_t streamId = *iter; + auto producerIter = producers_.find(streamId); + if (producerIter != producers_.end()) { + DHLOGI("update producer workmode, streamId: %{public}" PRIu32, streamId); + if(producerIter->second == nullptr) { + DHLOGE("update producer workmode failed, streamId: %{public}" PRIu32, streamId); + return DCAMERA_BAD_OPERATE; + } + producerIter->second->UpdateProducerWorkMode(param); + } + } + return DCAMERA_OK; +} } // namespace DistributedHardware } // namespace OHOS diff --git a/services/cameraservice/sourceservice/src/distributedcameramgr/dcameradata/dcamera_stream_data_process_producer.cpp b/services/cameraservice/sourceservice/src/distributedcameramgr/dcameradata/dcamera_stream_data_process_producer.cpp index 97e78bcf..75c238c9 100644 --- a/services/cameraservice/sourceservice/src/distributedcameramgr/dcameradata/dcamera_stream_data_process_producer.cpp +++ b/services/cameraservice/sourceservice/src/distributedcameramgr/dcameradata/dcamera_stream_data_process_producer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2023 Huawei Device Co., Ltd. + * Copyright (c) 2021-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -33,7 +33,7 @@ namespace DistributedHardware { DCameraStreamDataProcessProducer::DCameraStreamDataProcessProducer(std::string devId, std::string dhId, int32_t streamId, DCStreamType streamType) : devId_(devId), dhId_(dhId), streamId_(streamId), streamType_(streamType), eventHandler_(nullptr), - camHdiProvider_(nullptr) + camHdiProvider_(nullptr), workModeParam_(-1, 0, 0, false) { DHLOGI("DCameraStreamDataProcessProducer Constructor devId %{public}s dhId %{public}s streamType: %{public}d " "streamId: %{public}d", GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str(), streamType_, streamId_); @@ -287,5 +287,23 @@ void DCameraStreamDataProcessProducer::OnSmoothFinished(const std::shared_ptrPostTask(feedFunc); } } + +void DCameraStreamDataProcessProducer::UpdateProducerWorkMode(const WorkModeParam& param) +{ + DHLOGI("begin update producer workmode"); + if(!param.isAVsync) { + if (syncMem_ != nullptr) { + syncMem_->UnmapAshmem(); + syncMem_->CloseAshmem(); + syncMem_ = nullptr; + DHLOGI("syncMem_ release success"); + } + } + { + std::lock_guard lock(workModeParamMtx_); + workModeParam_ = param; + } + DHLOGI("update producer workmode success"); +} } // namespace DistributedHardware } // namespace OHOS diff --git a/services/cameraservice/sourceservice/test/unittest/common/distributedcamera/distributed_camera_source_service_test.cpp b/services/cameraservice/sourceservice/test/unittest/common/distributedcamera/distributed_camera_source_service_test.cpp index 7caa25a3..6548ded1 100644 --- a/services/cameraservice/sourceservice/test/unittest/common/distributedcamera/distributed_camera_source_service_test.cpp +++ b/services/cameraservice/sourceservice/test/unittest/common/distributedcamera/distributed_camera_source_service_test.cpp @@ -241,5 +241,21 @@ HWTEST_F(DistributedCameraSourceServiceTest, dcamera_source_service_test_009, Te EXPECT_EQ(DCAMERA_OK, ret); usleep(TEST_SOURCE_SERVICE); } + +/** + * @tc.name: dcamera_source_service_test_010 + * @tc.desc: Verify the UpdateDistributedHardwareWorkMode function. + * @tc.type: FUNC + * @tc.require: issue + */ +HWTEST_F(DistributedCameraSourceServiceTest, dcamera_source_service_test_010, TestSize.Level1) +{ + DHLOGI("DistributedCameraSourceServiceTest::dcamera_source_service_test_010"); + EXPECT_EQ(false, testSrcService_ == nullptr); + + WorkModeParam param(12, 120, 0, false);; + int32_t ret = testSrcService_->UpdateDistributedHardwareWorkMode(TEST_DEVICE_ID, TEST_CAMERA_DH_ID_0, param); + EXPECT_EQ(DCAMERA_BAD_OPERATE, ret); +} } // namespace DistributedHardware } // namespace OHOS \ No newline at end of file diff --git a/services/cameraservice/sourceservice/test/unittest/common/distributedcamera/distributed_camera_source_stub_test.cpp b/services/cameraservice/sourceservice/test/unittest/common/distributedcamera/distributed_camera_source_stub_test.cpp index 5ad1c54d..8a242540 100644 --- a/services/cameraservice/sourceservice/test/unittest/common/distributedcamera/distributed_camera_source_stub_test.cpp +++ b/services/cameraservice/sourceservice/test/unittest/common/distributedcamera/distributed_camera_source_stub_test.cpp @@ -16,6 +16,7 @@ #include #include "accesstoken_kit.h" +#include "ashmem.h" #include "nativetoken_kit.h" #include "token_setproc.h" #include "softbus_common.h" @@ -270,5 +271,83 @@ HWTEST_F(DcameraSourceStubTest, dcamera_source_stub_test_008, TestSize.Level1) ret = sourceProxy.RegisterDistributedHardware(devId, dhId, reqId, param); EXPECT_EQ(DCAMERA_BAD_VALUE, ret); } + +/** + * @tc.name: dcamera_source_stub_test_009 + * @tc.desc: Verify the UpdateDistributedHardwareWorkMode function. + * @tc.type: FUNC + * @tc.require: issue + */ +HWTEST_F(DcameraSourceStubTest, dcamera_source_stub_test_009, TestSize.Level1) +{ + DHLOGI("DcameraSourceStubTest::dcamera_source_stub_test_009"); + sptr sourceStubPtr(new MockDistributedCameraSourceStub()); + DistributedCameraSourceProxy sourceProxy(sourceStubPtr); + std::string devId = ""; + std::string dhId = "dhId000"; + WorkModeParam param(-1, 0, 0, false); + + int32_t ret = sourceProxy.UpdateDistributedHardwareWorkMode(devId, dhId, param); + EXPECT_EQ(DCAMERA_BAD_VALUE, ret); + + devId = "devId000"; + ret = sourceProxy.UpdateDistributedHardwareWorkMode(devId, dhId, param); + EXPECT_EQ(DCAMERA_BAD_VALUE, ret); + + dhId = ""; + ret = sourceProxy.UpdateDistributedHardwareWorkMode(devId, dhId, param); + EXPECT_EQ(DCAMERA_BAD_VALUE, ret); + + dhId = "dhId000"; + param.sharedMemLen = 120; + ret = sourceProxy.UpdateDistributedHardwareWorkMode(devId, dhId, param); + EXPECT_EQ(DCAMERA_BAD_VALUE, ret); + + param.fd = 12; + param.sharedMemLen = 0; + ret = sourceProxy.UpdateDistributedHardwareWorkMode(devId, dhId, param); + EXPECT_EQ(DCAMERA_BAD_VALUE, ret); +} + +/** + * @tc.name: dcamera_source_stub_test_010 + * @tc.desc: Verify the UpdateDistributedHardwareWorkMode function. + * @tc.type: FUNC + * @tc.require: issue + */ +HWTEST_F(DcameraSourceStubTest, dcamera_source_stub_test_010, TestSize.Level1) +{ + DHLOGI("DcameraSourceStubTest::dcamera_source_stub_test_009"); + sptr sourceStubPtr(new MockDistributedCameraSourceStub()); + DistributedCameraSourceProxy sourceProxy(sourceStubPtr); + std::string devId = ""; + std::string dhId = "dhId000"; + WorkModeParam param(-1, 0, 0, false); + + int32_t ret = sourceProxy.UpdateDistributedHardwareWorkMode(devId, dhId, param); + EXPECT_EQ(DCAMERA_BAD_VALUE, ret); + + devId = "devId000"; + ret = sourceProxy.UpdateDistributedHardwareWorkMode(devId, dhId, param); + EXPECT_EQ(DCAMERA_BAD_VALUE, ret); + + dhId = ""; + ret = sourceProxy.UpdateDistributedHardwareWorkMode(devId, dhId, param); + EXPECT_EQ(DCAMERA_BAD_VALUE, ret); + + dhId = "dhId000"; + param.sharedMemLen = 120; + ret = sourceProxy.UpdateDistributedHardwareWorkMode(devId, dhId, param); + EXPECT_EQ(DCAMERA_BAD_VALUE, ret); + + uint32_t memLen = 0; + std::string memName = "testMemory"; + auto syncSharedMem = OHOS::Ashmem::CreateAshmem(memName.c_str(), memLen); + param.fd = syncSharedMem->GetAshmemFd(); + param.sharedMemLen = 120; + ret = sourceProxy.UpdateDistributedHardwareWorkMode(devId, dhId, param); + EXPECT_EQ(DCAMERA_OK, ret); + syncSharedMem->CloseAshmem(); +} } // namespace DistributedHardware } // namespace OHOS \ No newline at end of file diff --git a/services/cameraservice/sourceservice/test/unittest/common/distributedcamera/mock_distributed_camera_source_stub.h b/services/cameraservice/sourceservice/test/unittest/common/distributedcamera/mock_distributed_camera_source_stub.h index 2809bc23..a3c2c4c8 100644 --- a/services/cameraservice/sourceservice/test/unittest/common/distributedcamera/mock_distributed_camera_source_stub.h +++ b/services/cameraservice/sourceservice/test/unittest/common/distributedcamera/mock_distributed_camera_source_stub.h @@ -64,6 +64,14 @@ public: (void)events; return DCAMERA_OK; } + int32_t UpdateDistributedHardwareWorkMode(const std::string& devId, const std::string& dhId, + const WorkModeParam& param) + { + (void)devId; + (void)dhId; + (void)param; + return DCAMERA_OK; + } }; diff --git a/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/dcamera_source_data_process_test.cpp b/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/dcamera_source_data_process_test.cpp index 541bd1c3..414761e9 100644 --- a/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/dcamera_source_data_process_test.cpp +++ b/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/dcamera_source_data_process_test.cpp @@ -214,5 +214,34 @@ HWTEST_F(DCameraSourceDataProcessTest, dcamera_source_data_process_test_006, Tes rc = testSrcDataProcess_->ReleaseStreams(g_streamIds); EXPECT_EQ(rc, DCAMERA_OK); } + +/** + * @tc.name: dcamera_source_data_process_test_007 + * @tc.desc: Verify UpdateProducerWorkMode. + * @tc.type: FUNC + * @tc.require: Issue Number + */ +HWTEST_F(DCameraSourceDataProcessTest, dcamera_source_data_process_test_007, TestSize.Level1) +{ + EXPECT_EQ(false, testSrcDataProcess_ == nullptr); + + std::shared_ptr captureInfo = std::make_shared(); + captureInfo->streamIds_.push_back(1); + captureInfo->width_ = TEST_WIDTH; + captureInfo->height_ = TEST_HEIGTH; + captureInfo->stride_ = 1; + captureInfo->format_ = 1; + captureInfo->dataspace_ = 1; + captureInfo->encodeType_ = ENCODE_TYPE_H265; + captureInfo->type_ = CONTINUOUS_FRAME; + int32_t rc = testSrcDataProcess_->StartCapture(captureInfo); + EXPECT_EQ(rc, DCAMERA_OK); + + std::vector streamIds; + streamIds.push_back(1); + WorkModeParam param(12, 120, 0, false); + rc = testSrcDataProcess_->UpdateProducerWorkMode(streamIds, param); + EXPECT_EQ(rc, DCAMERA_OK); +} } // namespace DistributedHardware } // namespace OHOS diff --git a/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/dcamera_source_dev_test.cpp b/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/dcamera_source_dev_test.cpp index bb2638b0..757a9e65 100644 --- a/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/dcamera_source_dev_test.cpp +++ b/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/dcamera_source_dev_test.cpp @@ -703,6 +703,23 @@ HWTEST_F(DCameraSourceDevTest, dcamera_source_dev_test_022, TestSize.Level1) EXPECT_EQ(DCAMERA_OK, ret); } +/** + * @tc.name: dcamera_source_dev_test_023 + * @tc.desc: Verify source dev UpdateDCameraWorkMode. + * @tc.type: FUNC + * @tc.require: Issue Number + */ +HWTEST_F(DCameraSourceDevTest, dcamera_source_dev_test_023, TestSize.Level1) +{ + WorkModeParam param(12, 120, 0, false); + int32_t ret = camDev_->UpdateDCameraWorkMode(param); + EXPECT_EQ(DCAMERA_BAD_VALUE, ret); + camDev_->InitDCameraSourceDev(); + camDev_->input_->Init(); + ret = camDev_->UpdateDCameraWorkMode(param); + EXPECT_EQ(DCAMERA_OK, ret); +} + /** * @tc.name: SetHicollieFlag_001 * @tc.desc: Verify source dev SetHicollieFlag. diff --git a/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/dcamera_source_input_test.cpp b/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/dcamera_source_input_test.cpp index 5bc85ea0..9aa9769b 100644 --- a/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/dcamera_source_input_test.cpp +++ b/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/dcamera_source_input_test.cpp @@ -455,5 +455,32 @@ HWTEST_F(DCameraSourceInputTest, dcamera_source_input_test_014, TestSize.Level1) testInputListener->OnDataReceived(buffers); EXPECT_EQ(true, capacity == 0); } + +/** + * @tc.name: dcamera_source_input_test_015 + * + * + * @tc.desc: Verify source inptut UpdateWorkMode. + * @tc.type: FUNC + * @tc.require: Issue Number + */ +HWTEST_F(DCameraSourceInputTest, dcamera_source_input_test_015, TestSize.Level1) +{ + EXPECT_EQ(false, testInput_ == nullptr); + + int32_t rc = testInput_->Init(); + EXPECT_EQ(rc, DCAMERA_OK); + + rc = testInput_->ConfigStreams(g_streamInfos); + EXPECT_EQ(rc, DCAMERA_OK); + + WorkModeParam param(12, 120, 0, false); + rc = testInput_->UpdateWorkMode(param); + EXPECT_EQ(rc, DCAMERA_OK); + + rc = testInput_->UnInit(); + EXPECT_EQ(rc, DCAMERA_OK); +} + } // namespace DistributedHardware } // namespace OHOS diff --git a/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/dcamera_stream_data_process_producer_test.cpp b/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/dcamera_stream_data_process_producer_test.cpp index bb6fe7c5..880da122 100644 --- a/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/dcamera_stream_data_process_producer_test.cpp +++ b/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/dcamera_stream_data_process_producer_test.cpp @@ -228,5 +228,6 @@ HWTEST_F(DCameraStreamDataProcessProducerTest, dcamera_stream_data_process_produ ret = streamProcess2->FeedStreamToDriver(dhBase, buffer); EXPECT_EQ(DCAMERA_BAD_VALUE, ret); } + } } diff --git a/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/dcamera_stream_data_process_test.cpp b/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/dcamera_stream_data_process_test.cpp index d917b9b2..b9ea2894 100644 --- a/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/dcamera_stream_data_process_test.cpp +++ b/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/dcamera_stream_data_process_test.cpp @@ -271,5 +271,34 @@ HWTEST_F(DCameraStreamDataProcessTest, dcamera_stream_data_process_test_008, Tes ret = streamProcess1->GetPipelineFormat(format); EXPECT_EQ(Videoformat::NV21, ret); } + +/** + * @tc.name: dcamera_stream_data_process_test_002 + * @tc.desc: Verify StartCapture func. + * @tc.type: FUNC + * @tc.require: issue + */ +HWTEST_F(DCameraStreamDataProcessTest, dcamera_stream_data_process_test_009, TestSize.Level1) +{ + DHLOGI("DCameraStreamDataProcessTest::dcamera_stream_data_process_test_009"); + std::shared_ptr streamProcess = + std::make_shared(TEST_DEVICE_ID, TEST_CAMERA_DH_ID_0, DCStreamType::CONTINUOUS_FRAME); + std::shared_ptr srcConfig = + std::make_shared(TEST_WIDTH, TEST_HEIGTH, TEST_FORMAT, TEST_DATASPACE, + DCEncodeType::ENCODE_TYPE_H264, DCStreamType::SNAPSHOT_FRAME); + + std::set streamIds; + streamIds.insert(1); + WorkModeParam param(12, 120, 0, false); + std::vector streamId; + streamId.push_back(1); + int32_t ret = streamProcess->UpdateProducerWorkMode(streamId, param); + EXPECT_EQ(DCAMERA_OK, ret); + streamProcess->ConfigStreams(srcConfig, streamIds); + streamProcess->StartCapture(srcConfig, streamIds); + ret = streamProcess->UpdateProducerWorkMode(streamId, param); + EXPECT_EQ(DCAMERA_OK, ret); + streamProcess->StopCapture(streamIds); +} } } \ No newline at end of file diff --git a/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/mock_dcamera_source_input.h b/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/mock_dcamera_source_input.h index 9787f4a3..c4350ceb 100644 --- a/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/mock_dcamera_source_input.h +++ b/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/mock_dcamera_source_input.h @@ -73,6 +73,10 @@ public: { return DCAMERA_OK; } + int32_t UpdateWorkMode(const WorkModeParam& param) + { + return DCAMERA_OK; + } }; } // namespace DistributedHardware } // namespace OHOS -- Gitee