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 083e2006d6d1fb7e6d7cfd403a5cba9403b807aa..3b1432055c609927f776785e0063a2f1a2bd2256 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 @@ -37,6 +37,7 @@ 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 SetSAState(); private: typedef enum { DCAMERA_SA_STATE_STOP = 0, 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 7b7feca304eb353242d69eaf665189b8bc02e764..1daab07ca16ad5a8dd7c2ab3de7b72670b4c5efb 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 @@ -193,6 +193,12 @@ int32_t DCameraSinkHandler::StopDistributedHardware(const std::string &networkId return dCameraSinkSrv->StopDistributedHardware(networkId); } +void DCameraSinkHandler::SetSAState() +{ + std::unique_lock lock(producerMutex_); + state_ = DCAMERA_SA_STATE_STOP; +} + IDistributedHardwareSink *GetSinkHardwareHandler() { DHLOGI("DCameraSinkHandler::GetSinkHardwareHandler"); diff --git a/interfaces/inner_kits/native_cpp/camera_sink/src/dcamera_sink_handler_ipc.cpp b/interfaces/inner_kits/native_cpp/camera_sink/src/dcamera_sink_handler_ipc.cpp index 40c99275c95d61d84a20d8baf07752cdd487cba9..ce9cb7769710ddb2a3494ebd6c066b3b404d067b 100644 --- a/interfaces/inner_kits/native_cpp/camera_sink/src/dcamera_sink_handler_ipc.cpp +++ b/interfaces/inner_kits/native_cpp/camera_sink/src/dcamera_sink_handler_ipc.cpp @@ -18,6 +18,7 @@ #include #include +#include "dcamera_sink_handler.h" #include "distributed_camera_constants.h" #include "distributed_hardware_log.h" #include "if_system_ability_manager.h" @@ -143,6 +144,7 @@ void DCameraSinkHandlerIpc::OnSinkLocalCamSrvDied(const wptr& rem DHLOGI("OnSinkLocalCamSrvDied Clear"); localSink_->AsObject()->RemoveDeathRecipient(sinkLocalRecipient_); localSink_ = nullptr; + DCameraSinkHandler::GetInstance().SetSAState(); } } // namespace DistributedHardware } // namespace OHOS 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 7675c899d9d477d2df46a59001e01a638fe69f8c..4dfd0904f8d13c2236d5c5c727c5fb6b01795334 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 @@ -40,6 +40,7 @@ public: std::shared_ptr callback) override; int32_t ConfigDistributedHardware(const std::string& devId, const std::string& dhId, const std::string& key, const std::string& value) override; + void SetSAState(); private: typedef enum { DCAMERA_SA_STATE_STOP = 0, 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 cb66085f456149535c027200442ba88b78708908..6c55b1d7169fe3dc0ec5d5f46f35ff86b72931ab 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 @@ -179,6 +179,12 @@ int32_t DCameraSourceHandler::ConfigDistributedHardware(const std::string& devId return DCAMERA_OK; } +void DCameraSourceHandler::SetSAState() +{ + std::unique_lock lock(producerMutex_); + state_ = DCAMERA_SA_STATE_STOP; +} + IDistributedHardwareSource *GetSourceHardwareHandler() { DHLOGI("DCameraSourceHandler GetSourceHardwareHandler Start"); diff --git a/interfaces/inner_kits/native_cpp/camera_source/src/dcamera_source_handler_ipc.cpp b/interfaces/inner_kits/native_cpp/camera_source/src/dcamera_source_handler_ipc.cpp index 16996d8e722d5eb26c7666fbd497fed5f5ed5e98..fb8638d2e141876112bcf93bcee17846953f2738 100644 --- a/interfaces/inner_kits/native_cpp/camera_source/src/dcamera_source_handler_ipc.cpp +++ b/interfaces/inner_kits/native_cpp/camera_source/src/dcamera_source_handler_ipc.cpp @@ -20,6 +20,7 @@ #include "if_system_ability_manager.h" #include "iservice_registry.h" +#include "dcamera_source_handler.h" #include "distributed_camera_constants.h" #include "distributed_hardware_log.h" #include "iremote_broker.h" @@ -142,6 +143,7 @@ void DCameraSourceHandlerIpc::OnSourceLocalCamSrvDied(const wptr& DHLOGI("OnSourceLocalCamSrvDied Clear"); localSource_->AsObject()->RemoveDeathRecipient(sourceLocalRecipient_); localSource_ = nullptr; + DCameraSourceHandler::GetInstance().SetSAState(); } } // namespace DistributedHardware } // namespace OHOS