diff --git a/services/cameraservice/sinkservice/include/distributedcameramgr/dcamera_sink_controller.h b/services/cameraservice/sinkservice/include/distributedcameramgr/dcamera_sink_controller.h index 3660d51ef58d181b05b89c8962d72d5af3d1f385..3fa5ac36976179f1ef31cc025066665b4737804e 100644 --- a/services/cameraservice/sinkservice/include/distributedcameramgr/dcamera_sink_controller.h +++ b/services/cameraservice/sinkservice/include/distributedcameramgr/dcamera_sink_controller.h @@ -85,6 +85,7 @@ private: void ProcessPostAuthorization(const AppExecFwk::InnerEvent::Pointer &event); int32_t CreateCtrlSession(); int32_t CheckSensitive(); + void HandleDisconnected(); bool isInit_; int32_t sessionState_; diff --git a/services/cameraservice/sinkservice/src/distributedcameramgr/dcamera_sink_controller.cpp b/services/cameraservice/sinkservice/src/distributedcameramgr/dcamera_sink_controller.cpp index 5bed607c8f5e4424de17010cd0e3901f075769dd..4431c08dea4f3b8bb37fc8f081873e2271488d75 100644 --- a/services/cameraservice/sinkservice/src/distributedcameramgr/dcamera_sink_controller.cpp +++ b/services/cameraservice/sinkservice/src/distributedcameramgr/dcamera_sink_controller.cpp @@ -567,22 +567,11 @@ void DCameraSinkController::OnSessionState(int32_t state, std::string networkId) } case DCAMERA_CHANNEL_STATE_DISCONNECTED: { DHLOGI("channel is disconnected"); - ffrt::submit([this]() { - DHLOGI("DCameraSinkController::OnSessionState %{public}s new thread session state: %{public}d", - GetAnonyString(dhId_).c_str(), sessionState_); - prctl(PR_SET_NAME, CHANNEL_DISCONNECTED.c_str()); - std::lock_guard autoLock(autoLock_); - int32_t ret = CloseChannel(); - if (ret != DCAMERA_OK) { - DHLOGE("session state: %{public}d, %{public}s close channel failed, ret: %{public}d", - sessionState_, GetAnonyString(dhId_).c_str(), ret); - } - ret = StopCapture(); - if (ret != DCAMERA_OK) { - DHLOGE("session state: %{public}d, %{public}s stop capture failed, ret: %{public}d", - sessionState_, GetAnonyString(dhId_).c_str(), ret); - } - }); + std::shared_ptr events = std::make_shared(); + events->eventType_ = DCAMERA_SINK_STOP; + events->eventResult_ = DCAMERA_EVENT_SINK_STOP; + DCameraNotify(events); + HandleDisconnected(); break; } default: @@ -591,6 +580,26 @@ void DCameraSinkController::OnSessionState(int32_t state, std::string networkId) } } +void DCameraSinkController::HandleDisconnected() +{ + ffrt::submit([this]() { + DHLOGI("DCameraSinkController::OnSessionState %{public}s new thread session state: %{public}d", + GetAnonyString(dhId_).c_str(), sessionState_); + prctl(PR_SET_NAME, CHANNEL_DISCONNECTED.c_str()); + std::lock_guard autoLock(autoLock_); + int32_t ret = CloseChannel(); + if (ret != DCAMERA_OK) { + DHLOGE("session state: %{public}d, %{public}s close channel failed, ret: %{public}d", + sessionState_, GetAnonyString(dhId_).c_str(), ret); + } + ret = StopCapture(); + if (ret != DCAMERA_OK) { + DHLOGE("session state: %{public}d, %{public}s stop capture failed, ret: %{public}d", + sessionState_, GetAnonyString(dhId_).c_str(), ret); + } + }); +} + void DCameraSinkController::OnSessionError(int32_t eventType, int32_t eventReason, std::string detail) { DHLOGI("DCameraSinkController::OnSessionError dhId: %{public}s, eventType: %{public}d, eventReason: %{public}d," diff --git a/services/channel/src/allconnect/distributed_camera_allconnect_manager.cpp b/services/channel/src/allconnect/distributed_camera_allconnect_manager.cpp index 6a10239b0fc21f280afdd4fd5101fe729ce9f92e..5029608ebbf289fcf5819367cb0224e11e42a42d 100644 --- a/services/channel/src/allconnect/distributed_camera_allconnect_manager.cpp +++ b/services/channel/src/allconnect/distributed_camera_allconnect_manager.cpp @@ -232,7 +232,8 @@ int32_t DCameraAllConnectManager::ApplyResult(int32_t errorcode, int32_t result, { DHLOGI("DCamera allconnect ApplyResult begin"); if (result != PASS) { - DHLOGE("DCamera allconnect Apply Result is Reject, errorcode is %{}d, reason is %{public}s", errorcode, reason); + DHLOGE("DCamera allconnect Apply Result is Reject, errorcode is %{public}d, reason is %{public}s", + errorcode, reason); applyResultBlock_->SetValue(false); return DistributedCameraErrno::DCAMERA_ERR_APPLY_RESULT; }