From 5ad1b4ccd07516883febf6c4fa7a7f9adffee9d3 Mon Sep 17 00:00:00 2001 From: ry521 Date: Thu, 23 Nov 2023 09:15:02 +0000 Subject: [PATCH 01/11] update interfaces/inner_kits/native_cpp/camera_sink/include/dcamera_sink_handler.h. Signed-off-by: ry521 --- .../native_cpp/camera_sink/include/dcamera_sink_handler.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/inner_kits/native_cpp/camera_sink/include/dcamera_sink_handler.h b/interfaces/inner_kits/native_cpp/camera_sink/include/dcamera_sink_handler.h index e40ab918..965f1190 100644 --- a/interfaces/inner_kits/native_cpp/camera_sink/include/dcamera_sink_handler.h +++ b/interfaces/inner_kits/native_cpp/camera_sink/include/dcamera_sink_handler.h @@ -19,7 +19,7 @@ #include #include #include - +#include "idistributed_camera_sink.h" #include "idistributed_hardware_sink.h" #include "single_instance.h" -- Gitee From 96051dabb07f8f1c6984663c1e3147cfb26667c2 Mon Sep 17 00:00:00 2001 From: ry521 Date: Thu, 23 Nov 2023 09:21:18 +0000 Subject: [PATCH 02/11] update interfaces/inner_kits/native_cpp/camera_sink/include/dcamera_sink_handler.h. Signed-off-by: ry521 --- .../camera_sink/include/dcamera_sink_handler.h | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/interfaces/inner_kits/native_cpp/camera_sink/include/dcamera_sink_handler.h b/interfaces/inner_kits/native_cpp/camera_sink/include/dcamera_sink_handler.h index 965f1190..e0111d1f 100644 --- a/interfaces/inner_kits/native_cpp/camera_sink/include/dcamera_sink_handler.h +++ b/interfaces/inner_kits/native_cpp/camera_sink/include/dcamera_sink_handler.h @@ -36,18 +36,25 @@ public: int32_t PauseDistributedHardware(const std::string &networkId) override; int32_t ResumeDistributedHardware(const std::string &networkId) override; int32_t StopDistributedHardware(const std::string &networkId) override; + void OnRemoteSinkSvrDied(const wptr &remote); private: typedef enum { DCAMERA_SA_STATE_STOP = 0, DCAMERA_SA_STATE_START = 1, } DCameraSAState; - DCameraSinkHandler() = default; + DCameraSinkHandler(); ~DCameraSinkHandler(); - void FinishStartSA(const std::string ¶ms); + void FinishStartSA(const std::string ¶ms, const sptr &remoteObject); void FinishStartSAFailed(const int32_t systemAbilityId); + class CameraSinkRecipient : public IRemoteObject::DeathRecipient { + public: + void OnRemoteDied(const wptr &remote) override; + }; private: std::condition_variable producerCon_; std::mutex producerMutex_; + sptr dCameraSinkProxy_ = nullptr; + sptr sinkSvrRecipient_ = nullptr; DCameraSAState state_ = DCAMERA_SA_STATE_STOP; friend class DCameraSinkLoadCallback; }; -- Gitee From dc64c0a95db9bb7df97a03b132f0183ecaa337d1 Mon Sep 17 00:00:00 2001 From: ry521 Date: Thu, 23 Nov 2023 09:24:38 +0000 Subject: [PATCH 03/11] update interfaces/inner_kits/native_cpp/camera_sink/src/dcamera_sink_handler.cpp. Signed-off-by: ry521 --- .../camera_sink/src/dcamera_sink_handler.cpp | 52 ++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/interfaces/inner_kits/native_cpp/camera_sink/src/dcamera_sink_handler.cpp b/interfaces/inner_kits/native_cpp/camera_sink/src/dcamera_sink_handler.cpp index e7e1e1e8..ead2b294 100644 --- a/interfaces/inner_kits/native_cpp/camera_sink/src/dcamera_sink_handler.cpp +++ b/interfaces/inner_kits/native_cpp/camera_sink/src/dcamera_sink_handler.cpp @@ -36,6 +36,14 @@ namespace OHOS { namespace DistributedHardware { IMPLEMENT_SINGLE_INSTANCE(DCameraSinkHandler); +DCameraSinkHandler::DCameraSinkHandler() +{ + DHLOGI("DCameraSinkHandler construct."); + if (sinkSvrRecipient_ == nullptr) { + sinkSvrRecipient_ = new (std::nothrow) CameraSinkRecipient(); + } +} + DCameraSinkHandler::~DCameraSinkHandler() { DHLOGI("~DCameraSinkHandler"); @@ -78,10 +86,16 @@ int32_t DCameraSinkHandler::InitSink(const std::string& params) return DCAMERA_OK; } -void DCameraSinkHandler::FinishStartSA(const std::string& params) +void DCameraSinkHandler::FinishStartSA(const std::string& params, const sptr &remoteObject) { DCameraSinkHandlerIpc::GetInstance().Init(); sptr dCameraSinkSrv = DCameraSinkHandlerIpc::GetInstance().GetSinkLocalCamSrv(); + remoteObject->AddDeathRecipient(sinkSvrRecipient_); + dCameraSinkProxy_ = iface_cast(remoteObject); + if ((dCameraSinkProxy_ == nullptr) || (dCameraSinkProxy_->AsObject() == nullptr)) { + DHLOGE("Faild to get input sink proxy."); + return; + } if (dCameraSinkSrv == nullptr) { DHLOGE("get Service failed"); return; @@ -165,6 +179,42 @@ int32_t DCameraSinkHandler::StopDistributedHardware(const std::string &networkId return DCAMERA_OK; } +void DCameraSinkHandler::CameraSinkRecipient::OnRemoteDied(const wptr &remote) +{ + if (remote == nullptr) { + DHLOGE("OnRemoteDied remote is nullptr."); + return; + } + DHLOGI("DInputSinkSvrRecipient OnRemoteDied."); + DCameraSinkHandler::GetInstance().OnRemoteSinkSvrDied(remote); +} + +void DCameraSinkHandler::OnRemoteSinkSvrDied(const wptr &remote) +{ + DHLOGI("DCameraSinkHandle OnRemoteSinkSvrDied."); + std::lock_guard lock(producerMutex_); + if (dCameraSinkProxy_ == nullptr) { + DHLOGE("dCameraSinkProxy_ is nullptr."); + return; + } + if (dCameraSinkProxy_->AsObject() == nullptr) { + DHLOGE("AsObject is nullptr."); + return; + } + sptr remoteObject = remote.promote(); + if (remoteObject == nullptr) { + DHLOGE("OnRemoteDied remote promoted failed"); + return; + } + + if (dCameraSinkProxy_->AsObject() != remoteObject) { + DHLOGE("OnRemoteSinkSvrDied not found remote object."); + return; + } + dCameraSinkProxy_->AsObject()->RemoveDeathRecipient(sinkSvrRecipient_); + dCameraSinkProxy_ = nullptr; +} + IDistributedHardwareSink *GetSinkHardwareHandler() { DHLOGI("DCameraSinkHandler::GetSinkHardwareHandler"); -- Gitee From fbb58e3b2d79f632a370b933ca64ebe61fc0822a Mon Sep 17 00:00:00 2001 From: ry521 Date: Thu, 23 Nov 2023 09:25:26 +0000 Subject: [PATCH 04/11] update interfaces/inner_kits/native_cpp/camera_sink/src/dcamera_sink_load_callback.cpp. Signed-off-by: ry521 --- .../native_cpp/camera_sink/src/dcamera_sink_load_callback.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/inner_kits/native_cpp/camera_sink/src/dcamera_sink_load_callback.cpp b/interfaces/inner_kits/native_cpp/camera_sink/src/dcamera_sink_load_callback.cpp index f7ea2632..cba754f5 100644 --- a/interfaces/inner_kits/native_cpp/camera_sink/src/dcamera_sink_load_callback.cpp +++ b/interfaces/inner_kits/native_cpp/camera_sink/src/dcamera_sink_load_callback.cpp @@ -37,7 +37,7 @@ void DCameraSinkLoadCallback::OnLoadSystemAbilitySuccess(int32_t systemAbilityId DHLOGE("remoteObject is null."); return; } - DCameraSinkHandler::GetInstance().FinishStartSA(params_); + DCameraSinkHandler::GetInstance().FinishStartSA(params_, remoteObject); } void DCameraSinkLoadCallback::OnLoadSystemAbilityFail(int32_t systemAbilityId) -- Gitee From b7d230ce9cea0aa2ba887147781cf2322aae4b45 Mon Sep 17 00:00:00 2001 From: ry521 Date: Thu, 23 Nov 2023 09:26:18 +0000 Subject: [PATCH 05/11] update interfaces/inner_kits/native_cpp/camera_source/include/dcamera_source_handler.h. Signed-off-by: ry521 --- .../native_cpp/camera_source/include/dcamera_source_handler.h | 1 + 1 file changed, 1 insertion(+) 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 7675c899..5940be26 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 @@ -24,6 +24,7 @@ #include "refbase.h" #include "dcamera_source_callback.h" +#include "idistributed_camera_source.h" #include "idistributed_hardware_source.h" #include "single_instance.h" -- Gitee From 0018c3fc6050f7cf550ca57db4e0f61d5f4d157f Mon Sep 17 00:00:00 2001 From: ry521 Date: Thu, 23 Nov 2023 09:27:23 +0000 Subject: [PATCH 06/11] update interfaces/inner_kits/native_cpp/camera_source/include/dcamera_source_handler.h. Signed-off-by: ry521 --- .../camera_source/include/dcamera_source_handler.h | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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 5940be26..95d9aa26 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 @@ -48,13 +48,21 @@ private: } DCameraSAState; DCameraSourceHandler(); ~DCameraSourceHandler(); - void FinishStartSA(const std::string ¶ms); + void FinishStartSA(const std::string ¶ms, const sptr &remoteObject); void FinishStartSAFailed(const int32_t systemAbilityId); + void OnRemoteSourceSvrDied(const wptr &remote); + class CameraSourceRecipient : public IRemoteObject::DeathRecipient { + public: + void OnRemoteDied(const wptr &remote) override; + }; private: std::mutex optLock_; sptr callback_; std::condition_variable producerCon_; std::mutex producerMutex_; + sptr dCameraSourceProxy_ = nullptr; + sptr dCameraSourceCallback_ = nullptr; + sptr sourceSvrRecipient_ = nullptr; DCameraSAState state_ = DCAMERA_SA_STATE_STOP; friend class DCameraSourceLoadCallback; }; -- Gitee From 92daffaa4dad24d2e1fa92530208320bef30181a Mon Sep 17 00:00:00 2001 From: ry521 Date: Thu, 23 Nov 2023 09:30:24 +0000 Subject: [PATCH 07/11] update interfaces/inner_kits/native_cpp/camera_source/src/dcamera_source_handler.cpp. Signed-off-by: ry521 --- .../src/dcamera_source_handler.cpp | 53 ++++++++++++++++++- 1 file changed, 51 insertions(+), 2 deletions(-) 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 cb66085f..16766ca3 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 @@ -33,7 +33,13 @@ IMPLEMENT_SINGLE_INSTANCE(DCameraSourceHandler); DCameraSourceHandler::DCameraSourceHandler() { DHLOGI("DCameraSourceHandler construct."); - callback_ = new DCameraSourceCallback(); + if (sourceSvrRecipient_ == nullptr) { + sourceSvrRecipient_ = new (std::nothrow) CameraSourceRecipient(); + } + + if (dCameraSourceCallback_ == nullptr) { + dCameraSourceCallback_ = new (std::nothrow) DCameraSourceCallback(); + } } DCameraSourceHandler::~DCameraSourceHandler() @@ -77,10 +83,17 @@ int32_t DCameraSourceHandler::InitSource(const std::string& params) return DCAMERA_OK; } -void DCameraSourceHandler::FinishStartSA(const std::string ¶ms) +void DCameraSourceHandler::FinishStartSA(const std::string ¶ms, const sptr &remoteObject) { DCameraSourceHandlerIpc::GetInstance().Init(); sptr dCameraSourceSrv = DCameraSourceHandlerIpc::GetInstance().GetSourceLocalCamSrv(); + remoteObject->AddDeathRecipient(sourceSvrRecipient_); + dCameraSourceProxy_ = iface_cast(remoteObject); + if ((dCameraSourceProxy_ == nullptr) || (dCameraSourceProxy_->AsObject() == nullptr)) { + DHLOGE("Faild to get camera source proxy."); + return; + } + sptr dCameraSourceSrv = DCameraSourceHandlerIpc::GetInstance().GetSourceLocalCamSrv(); if (dCameraSourceSrv == nullptr) { DHLOGE("get Service failed"); return; @@ -179,6 +192,42 @@ int32_t DCameraSourceHandler::ConfigDistributedHardware(const std::string& devId return DCAMERA_OK; } +void DCameraSourceHandler::CameraSourceRecipient::OnRemoteDied(const wptr &remote) +{ + if (remote == nullptr) { + DHLOGE("OnRemoteDied remote is nullptr."); + return; + } + DHLOGI("DCameraSourceSvrRecipient OnRemoteDied."); + DCameraSourceHandler::GetInstance().OnRemoteSourceSvrDied(remote); +} + +void DCameraSourceHandler::OnRemoteSourceSvrDied(const wptr &remote) +{ + DHLOGI("OnRemoteSourceSvrDied."); + std::lock_guard lock(producerMutex_); + if (dCameraSourceProxy_ == nullptr) { + DHLOGE("dCameraSourceProxy is nullptr."); + return; + } + if (dCameraSourceProxy_->AsObject() == nullptr) { + DHLOGE("AsObject is nullptr."); + return; + } + sptr remoteObject = remote.promote(); + if (remoteObject == nullptr) { + DHLOGE("OnRemoteDied remote promoted failed"); + return; + } + + if (dCameraSourceProxy_->AsObject() != remoteObject) { + DHLOGE("OnRemoteSourceSvrDied not found remote object."); + return; + } + dCameraSourceProxy_->AsObject()->RemoveDeathRecipient(sourceSvrRecipient_); + dCameraSourceProxy_ = nullptr; +} + IDistributedHardwareSource *GetSourceHardwareHandler() { DHLOGI("DCameraSourceHandler GetSourceHardwareHandler Start"); -- Gitee From 34893343a3ed6e5bef894766d66bb8df0c70b108 Mon Sep 17 00:00:00 2001 From: ry521 Date: Thu, 23 Nov 2023 09:31:01 +0000 Subject: [PATCH 08/11] update interfaces/inner_kits/native_cpp/camera_source/src/dcamera_source_load_callback.cpp. Signed-off-by: ry521 --- .../camera_source/src/dcamera_source_load_callback.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/inner_kits/native_cpp/camera_source/src/dcamera_source_load_callback.cpp b/interfaces/inner_kits/native_cpp/camera_source/src/dcamera_source_load_callback.cpp index d6e52434..fbb21f84 100644 --- a/interfaces/inner_kits/native_cpp/camera_source/src/dcamera_source_load_callback.cpp +++ b/interfaces/inner_kits/native_cpp/camera_source/src/dcamera_source_load_callback.cpp @@ -37,7 +37,7 @@ void DCameraSourceLoadCallback::OnLoadSystemAbilitySuccess(int32_t systemAbility DHLOGE("remoteObject is null."); return; } - DCameraSourceHandler::GetInstance().FinishStartSA(params_); + DCameraSourceHandler::GetInstance().FinishStartSA(params_, remoteObject); } void DCameraSourceLoadCallback::OnLoadSystemAbilityFail(int32_t systemAbilityId) -- Gitee From cc682f0cb12f252e233c3f19c9566c927fe39e5b Mon Sep 17 00:00:00 2001 From: ry521 Date: Thu, 23 Nov 2023 09:33:24 +0000 Subject: [PATCH 09/11] . Signed-off-by: ry521 --- .../common/camera_sink/dcamera_sink_handler_test.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/interfaces/inner_kits/native_cpp/test/unittest/common/camera_sink/dcamera_sink_handler_test.cpp b/interfaces/inner_kits/native_cpp/test/unittest/common/camera_sink/dcamera_sink_handler_test.cpp index 7b0677c8..4f4b4646 100644 --- a/interfaces/inner_kits/native_cpp/test/unittest/common/camera_sink/dcamera_sink_handler_test.cpp +++ b/interfaces/inner_kits/native_cpp/test/unittest/common/camera_sink/dcamera_sink_handler_test.cpp @@ -93,7 +93,10 @@ HWTEST_F(DCameraSinkHandlerTest, dcamera_sink_handler_test_002, TestSize.Level1) EXPECT_EQ(DCAMERA_OK, ret); int32_t systemAbilityId = 4804; - DCameraSinkHandler::GetInstance().FinishStartSA(params); + sptr samgr = + SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); + sptr remoteObject = samgr->GetSystemAbility(systemAbilityId); + DCameraSinkHandler::GetInstance().FinishStartSA(params,remoteObject); DCameraSinkHandler::GetInstance().FinishStartSAFailed(systemAbilityId); ret = DCameraSinkHandler::GetInstance().ReleaseSink(); EXPECT_EQ(DCAMERA_OK, ret); -- Gitee From a54bcf5c57bd8e02368b79e07ddff85578ba18ef Mon Sep 17 00:00:00 2001 From: ry521 Date: Thu, 23 Nov 2023 09:35:16 +0000 Subject: [PATCH 10/11] . Signed-off-by: ry521 --- .../common/camera_source/dcamera_source_handler_test.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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 e65d9745..b036f2f9 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 @@ -94,8 +94,11 @@ HWTEST_F(DCameraSourceHandlerTest, dcamera_source_handler_test_002, TestSize.Lev int32_t ret = DCameraSourceHandler::GetInstance().InitSource(params); EXPECT_EQ(DCAMERA_OK, ret); + sptr samgr = + SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); int32_t systemAbilityId = 4803; - DCameraSourceHandler::GetInstance().FinishStartSA(params); + sptr remoteObject = samgr->GetSystemAbility(systemAbilityId); + DCameraSourceHandler::GetInstance().FinishStartSA(params, remoteObject); DCameraSourceHandler::GetInstance().FinishStartSAFailed(systemAbilityId); ret = DCameraSourceHandler::GetInstance().ReleaseSource(); EXPECT_EQ(DCAMERA_OK, ret); -- Gitee From b93689c867054a83c81029cff4f761059eb4d24f Mon Sep 17 00:00:00 2001 From: ry521 Date: Thu, 23 Nov 2023 10:50:59 +0000 Subject: [PATCH 11/11] update interfaces/inner_kits/native_cpp/camera_source/src/dcamera_source_handler.cpp. Signed-off-by: ry521 --- .../native_cpp/camera_source/src/dcamera_source_handler.cpp | 1 - 1 file changed, 1 deletion(-) 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 16766ca3..4920e5bb 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 @@ -93,7 +93,6 @@ void DCameraSourceHandler::FinishStartSA(const std::string ¶ms, const sptr dCameraSourceSrv = DCameraSourceHandlerIpc::GetInstance().GetSourceLocalCamSrv(); if (dCameraSourceSrv == nullptr) { DHLOGE("get Service failed"); return; -- Gitee