等sink和source都release后,SA再进行退出。

Signed-off-by: wangchaole <wangchaole1@huawei.com>
This commit is contained in:
wangchaole
2022-05-09 11:49:36 +08:00
parent d7a2e5520f
commit bc1cfda39e
7 changed files with 31 additions and 48 deletions
+1
View File
@@ -33,6 +33,7 @@ ohos_shared_library("distributed_camera_utils") {
sources = [
"src/utils/data_buffer.cpp",
"src/utils/dcamera_utils_tools.cpp",
"src/utils/dcamera_sa_process_state.cpp",
]
deps = [
@@ -16,30 +16,10 @@
#ifndef DCAMERA_SA_PROCESS_STATE_H
#define DCAMERA_SA_PROCESS_STATE_H
#include "single_instance.h"
#include <mutex>
namespace OHOS {
namespace DistributedHardware {
class DCameraSAProcessState {
DECLARE_SINGLE_INSTANCE_BASE(DCameraSAProcessState);
public:
void SetSinkProcessExit();
void SetSourceProcessExit();
private:
typedef enum {
DCAMERA_SA_EXIT_STATE_START = 0,
DCAMERA_SA_EXIT_STATE_STOP = 1
} DCameraSAState;
DCameraSAProcessState() = default;
~DCameraSAProcessState();
void CheckSAProcessState();
DCameraSAState sinkSAState_ = DCAMERA_SA_EXIT_STATE_START;
DCameraSAState sourceSAState_ = DCAMERA_SA_EXIT_STATE_START;
std::mutex saProcessState_;
};
void SetSinkProcessExit();
void SetSourceProcessExit();
} // namespace DistributedHardware
} // namespace OHOS
#endif // DCAMERA_SA_EXIT_STATE_H
@@ -15,43 +15,47 @@
#include "dcamera_sa_process_state.h"
#include <mutex>
#include "distributed_hardware_log.h"
namespace OHOS {
namespace DistributedHardware {
IMPLEMENT_SINGLE_INSTANCE(DCameraSAProcessState);
DCameraSAProcessState::~DCameraSAProcessState()
{
DHLOGI("DCameraSAProcessState Delete");
}
typedef enum {
DCAMERA_SA_EXIT_STATE_START = 0,
DCAMERA_SA_EXIT_STATE_STOP = 1
} DCameraSAState;
void DCameraSAProcessState::SetSinkProcessExit()
DCameraSAState sinkSAState_ = DCAMERA_SA_EXIT_STATE_START;
DCameraSAState sourceSAState_ = DCAMERA_SA_EXIT_STATE_START;
std::mutex saProcessState_;
void SetSinkProcessExit()
{
DHLOGI("set sink process exit.");
std::lock_guard<std::mutex> autoLock(saProcessState_);
sinkSAState_ = DCAMERA_SA_EXIT_STATE_STOP;
CheckSAProcessState();
}
void DCameraSAProcessState::SetSourceProcessExit()
{
DHLOGI("set sources process exit.");
std::lock_guard<std::mutex> autoLock(saProcessState_);
sourceSAState_ = DCAMERA_SA_EXIT_STATE_STOP;
CheckSAProcessState();
}
void DCameraSAProcessState::CheckSAProcessState()
{
DHLOGI("start exit sa process.");
DHLOGI("sourceSAState_ = %d sinkSAState_ = %d", sourceSAState_, sinkSAState_);
if (sourceSAState_ == DCAMERA_SA_EXIT_STATE_START || sinkSAState_ == DCAMERA_SA_EXIT_STATE_START) {
DHLOGI("=============DCAMERA_SA_EXIT_STATE_START==============");
return;
}
DHLOGI("exit sa process success.");
exit(0);
}
void SetSourceProcessExit()
{
DHLOGI("set sources process exit.");
std::lock_guard<std::mutex> autoLock(saProcessState_);
sourceSAState_ = DCAMERA_SA_EXIT_STATE_STOP;
DHLOGI("sourceSAState_ = %d sinkSAState_ = %d", sourceSAState_, sinkSAState_);
if (sourceSAState_ == DCAMERA_SA_EXIT_STATE_START || sinkSAState_ == DCAMERA_SA_EXIT_STATE_START) {
return;
}
DHLOGI("exit sa process success.");
exit(0);
}
} // namespace DistributedHardware
} // namespace OHOS
@@ -71,7 +71,6 @@ ohos_shared_library("distributed_camera_sink") {
"${services_path}/cameraservice/base/src/dcamera_info_cmd.cpp",
"${services_path}/cameraservice/base/src/dcamera_metadata_setting_cmd.cpp",
"${services_path}/cameraservice/base/src/dcamera_open_info_cmd.cpp",
"${services_path}/cameraservice/base/src/dcamera_sa_process_state.cpp",
"src/distributedcamera/distributed_camera_sink_service.cpp",
"src/distributedcamera/distributed_camera_sink_stub.cpp",
"src/distributedcameramgr/callback/dcamera_sink_controller_state_callback.cpp",
@@ -117,8 +117,8 @@ int32_t DistributedCameraSinkService::ReleaseSink()
}
}
camerasMap_.clear();
DHLOGI("check source sa state.");
DCameraSAProcessState::GetInstance().SetSinkProcessExit();
DHLOGI("check sink sa state.");
SetSinkProcessExit();
return DCAMERA_OK;
}
@@ -60,7 +60,6 @@ ohos_shared_library("distributed_camera_source") {
"${services_path}/cameraservice/base/src/dcamera_info_cmd.cpp",
"${services_path}/cameraservice/base/src/dcamera_metadata_setting_cmd.cpp",
"${services_path}/cameraservice/base/src/dcamera_open_info_cmd.cpp",
"${services_path}/cameraservice/base/src/dcamera_sa_process_state.cpp",
"src/distributedcamera/dcamera_service_state_listener.cpp",
"src/distributedcamera/dcamera_source_callback_proxy.cpp",
"src/distributedcamera/distributed_camera_source_service.cpp",
@@ -104,7 +104,7 @@ int32_t DistributedCameraSourceService::ReleaseSource()
}
listener_ = nullptr;
DHLOGI("check source sa state.");
DCameraSAProcessState::GetInstance().SetSourceProcessExit();
SetSourceProcessExit();
return DCAMERA_OK;
}