mirror of
https://github.com/openharmony/distributed_camera.git
synced 2026-07-21 04:05:22 -04:00
!43 fix distributed camera bug
Merge pull request !43 from zhuxu/OpenHarmony-3.1-Release
This commit is contained in:
+1
@@ -66,6 +66,7 @@ private:
|
||||
|
||||
bool isInit_;
|
||||
int32_t sessionState_;
|
||||
std::mutex autoLock_;
|
||||
std::mutex captureLock_;
|
||||
std::mutex channelLock_;
|
||||
std::string dhId_;
|
||||
|
||||
+33
-15
@@ -15,6 +15,8 @@
|
||||
|
||||
#include "dcamera_sink_controller.h"
|
||||
|
||||
#include <thread>
|
||||
|
||||
#include "anonymous_string.h"
|
||||
#include "dcamera_channel_sink_impl.h"
|
||||
#include "dcamera_client.h"
|
||||
@@ -71,8 +73,8 @@ int32_t DCameraSinkController::StartCapture(std::vector<std::shared_ptr<DCameraC
|
||||
|
||||
int32_t DCameraSinkController::StopCapture()
|
||||
{
|
||||
std::lock_guard<std::mutex> autoLock(captureLock_);
|
||||
DHLOGI("DCameraSinkController::StopCapture dhId: %s", GetAnonyString(dhId_).c_str());
|
||||
std::lock_guard<std::mutex> autoLock(captureLock_);
|
||||
int32_t ret = operator_->StopCapture();
|
||||
if (ret != DCAMERA_OK) {
|
||||
DHLOGE("DCameraSinkController::StopCapture client stop capture failed, dhId: %s, ret: %d",
|
||||
@@ -201,8 +203,8 @@ int32_t DCameraSinkController::OpenChannel(std::shared_ptr<DCameraOpenInfo>& ope
|
||||
|
||||
int32_t DCameraSinkController::CloseChannel()
|
||||
{
|
||||
std::lock_guard<std::mutex> autoLock(channelLock_);
|
||||
DHLOGI("DCameraSinkController::CloseChannel dhId: %s", GetAnonyString(dhId_).c_str());
|
||||
std::lock_guard<std::mutex> autoLock(channelLock_);
|
||||
DCameraSinkServiceIpc::GetInstance().DeleteSourceRemoteDhms(srcDevId_);
|
||||
srcDevId_.clear();
|
||||
int32_t ret = channel_->ReleaseSession();
|
||||
@@ -259,8 +261,19 @@ int32_t DCameraSinkController::Init(std::vector<DCameraIndex>& indexs)
|
||||
int32_t DCameraSinkController::UnInit()
|
||||
{
|
||||
DHLOGI("DCameraSinkController::UnInit dhId: %s", GetAnonyString(dhId_).c_str());
|
||||
std::lock_guard<std::mutex> autoLock(autoLock_);
|
||||
int32_t ret = StopCapture();
|
||||
if (ret != DCAMERA_OK) {
|
||||
DHLOGE("DCameraSinkController::UnInit %s stop capture failed, ret: %d", GetAnonyString(dhId_).c_str(), ret);
|
||||
}
|
||||
|
||||
ret = CloseChannel();
|
||||
if (ret != DCAMERA_OK) {
|
||||
DHLOGE("DCameraSinkController::UnInit %s close channel failed, ret: %d", GetAnonyString(dhId_).c_str(), ret);
|
||||
}
|
||||
|
||||
if (output_ != nullptr) {
|
||||
int32_t ret = output_->UnInit();
|
||||
ret = output_->UnInit();
|
||||
if (ret != DCAMERA_OK) {
|
||||
DHLOGE("DCameraSinkController release output failed, dhId: %s, ret: %d",
|
||||
GetAnonyString(dhId_).c_str(), ret);
|
||||
@@ -268,7 +281,7 @@ int32_t DCameraSinkController::UnInit()
|
||||
}
|
||||
|
||||
if (operator_ != nullptr) {
|
||||
int32_t ret = operator_->UnInit();
|
||||
ret = operator_->UnInit();
|
||||
if (ret != DCAMERA_OK) {
|
||||
DHLOGE("DCameraSinkController release operator failed, dhId: %s, ret: %d",
|
||||
GetAnonyString(dhId_).c_str(), ret);
|
||||
@@ -319,16 +332,21 @@ void DCameraSinkController::OnSessionState(int32_t state)
|
||||
}
|
||||
case DCAMERA_CHANNEL_STATE_DISCONNECTED: {
|
||||
DHLOGI("DCameraSinkController::OnSessionState channel is disconnected");
|
||||
int32_t ret = StopCapture();
|
||||
if (ret != DCAMERA_OK) {
|
||||
DHLOGE("DCameraSinkController::OnSessionState session state: %d, %s stop capture failed, ret: %d",
|
||||
sessionState_, GetAnonyString(dhId_).c_str(), ret);
|
||||
}
|
||||
ret = CloseChannel();
|
||||
if (ret != DCAMERA_OK) {
|
||||
DHLOGE("DCameraSinkController::OnSessionState session state: %d, %s close channel failed, ret: %d",
|
||||
sessionState_, GetAnonyString(dhId_).c_str(), ret);
|
||||
}
|
||||
std::thread([this]() {
|
||||
DHLOGI("DCameraSinkController::OnSessionState %s new thread session state: %d",
|
||||
GetAnonyString(dhId_).c_str(), sessionState_);
|
||||
std::lock_guard<std::mutex> autoLock(autoLock_);
|
||||
int32_t ret = StopCapture();
|
||||
if (ret != DCAMERA_OK) {
|
||||
DHLOGE("DCameraSinkController::OnSessionState session state: %d, %s stop capture failed, ret: %d",
|
||||
sessionState_, GetAnonyString(dhId_).c_str(), ret);
|
||||
}
|
||||
ret = CloseChannel();
|
||||
if (ret != DCAMERA_OK) {
|
||||
DHLOGE("DCameraSinkController::OnSessionState session state: %d, %s close channel failed, ret: %d",
|
||||
sessionState_, GetAnonyString(dhId_).c_str(), ret);
|
||||
}
|
||||
}).detach();
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
@@ -363,8 +381,8 @@ void DCameraSinkController::PostAuthorization(std::vector<std::shared_ptr<DCamer
|
||||
|
||||
int32_t DCameraSinkController::StartCaptureInner(std::vector<std::shared_ptr<DCameraCaptureInfo>>& captureInfos)
|
||||
{
|
||||
std::lock_guard<std::mutex> autoLock(captureLock_);
|
||||
DHLOGI("DCameraSinkController::StartCaptureInner dhId: %s", GetAnonyString(dhId_).c_str());
|
||||
std::lock_guard<std::mutex> autoLock(captureLock_);
|
||||
int32_t ret = output_->StartCapture(captureInfos);
|
||||
if (ret != DCAMERA_OK) {
|
||||
DHLOGE("DCameraSinkController::StartCaptureInner output start capture failed, dhId: %s, ret: %d",
|
||||
|
||||
+16
-11
@@ -152,20 +152,25 @@ int32_t DCameraSinkOutput::StartCapture(std::vector<std::shared_ptr<DCameraCaptu
|
||||
int32_t DCameraSinkOutput::StopCapture()
|
||||
{
|
||||
DHLOGI("DCameraSinkOutput::StopCapture dhId: %s", GetAnonyString(dhId_).c_str());
|
||||
int32_t ret = dataProcesses_[CONTINUOUS_FRAME]->StopCapture();
|
||||
if (ret != DCAMERA_OK) {
|
||||
DHLOGE("DCameraSinkOutput::StopCapture continuous data process stop capture failed, dhId: %s, ret: %d",
|
||||
GetAnonyString(dhId_).c_str(), ret);
|
||||
return ret;
|
||||
auto iterCon = dataProcesses_.find(CONTINUOUS_FRAME);
|
||||
if (iterCon != dataProcesses_.end()) {
|
||||
DHLOGI("DCameraSinkOutput::StopCapture %s continuous frame stop capture", GetAnonyString(dhId_).c_str());
|
||||
int32_t ret = iterCon->second->StopCapture();
|
||||
if (ret != DCAMERA_OK) {
|
||||
DHLOGE("DCameraSinkOutput::StopCapture continuous data process stop capture failed, dhId: %s, ret: %d",
|
||||
GetAnonyString(dhId_).c_str(), ret);
|
||||
}
|
||||
}
|
||||
|
||||
ret = dataProcesses_[SNAPSHOT_FRAME]->StopCapture();
|
||||
if (ret != DCAMERA_OK) {
|
||||
DHLOGE("DCameraSinkOutput::StopCapture snapshot data process stop capture failed, dhId: %s, ret: %d",
|
||||
GetAnonyString(dhId_).c_str(), ret);
|
||||
return ret;
|
||||
auto iterSnap = dataProcesses_.find(SNAPSHOT_FRAME);
|
||||
if (iterSnap != dataProcesses_.end()) {
|
||||
DHLOGI("DCameraSinkOutput::StopCapture %s snapshot frame stop capture", GetAnonyString(dhId_).c_str());
|
||||
int32_t ret = iterSnap->second->StopCapture();
|
||||
if (ret != DCAMERA_OK) {
|
||||
DHLOGE("DCameraSinkOutput::StopCapture snapshot data process stop capture failed, dhId: %s, ret: %d",
|
||||
GetAnonyString(dhId_).c_str(), ret);
|
||||
}
|
||||
}
|
||||
|
||||
DHLOGI("DCameraSinkOutput::StopCapture %s success", GetAnonyString(dhId_).c_str());
|
||||
return DCAMERA_OK;
|
||||
}
|
||||
|
||||
+2
-2
@@ -52,7 +52,7 @@ int32_t DCameraServiceStateListener::OnRegisterNotify(const std::string& devId,
|
||||
DHLOGE("DCameraServiceStateListener OnRegisterNotify OnNotifyRegResult failed: %d", ret);
|
||||
}
|
||||
if (status != DCAMERA_OK) {
|
||||
std::thread([this, &devId, &dhId]() {
|
||||
std::thread([this, devId, dhId]() {
|
||||
DHLOGI("DCameraServiceStateListener OnRegisterNotify thread delete devId: %s dhId: %s",
|
||||
GetAnonyString(devId).c_str(), GetAnonyString(dhId).c_str());
|
||||
DCameraIndex camIndex(devId, dhId);
|
||||
@@ -78,7 +78,7 @@ int32_t DCameraServiceStateListener::OnUnregisterNotify(const std::string& devId
|
||||
}
|
||||
|
||||
if (status == DCAMERA_OK) {
|
||||
std::thread([this, &devId, &dhId]() {
|
||||
std::thread([this, devId, dhId]() {
|
||||
DHLOGI("DCameraServiceStateListener OnUnregisterNotify thread delete devId: %s dhId: %s",
|
||||
GetAnonyString(devId).c_str(), GetAnonyString(dhId).c_str());
|
||||
DCameraIndex camIndex(devId, dhId);
|
||||
|
||||
Reference in New Issue
Block a user