mirror of
https://github.com/openharmony/distributed_camera.git
synced 2026-07-19 16:43:57 -04:00
等sink和source都release后,SA再进行退出。
Signed-off-by: wangchaole <wangchaole1@huawei.com>
This commit is contained in:
@@ -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 = [
|
||||
|
||||
+2
-22
@@ -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
|
||||
+25
-21
@@ -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",
|
||||
|
||||
+2
-2
@@ -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",
|
||||
|
||||
+1
-1
@@ -104,7 +104,7 @@ int32_t DistributedCameraSourceService::ReleaseSource()
|
||||
}
|
||||
listener_ = nullptr;
|
||||
DHLOGI("check source sa state.");
|
||||
DCameraSAProcessState::GetInstance().SetSourceProcessExit();
|
||||
SetSourceProcessExit();
|
||||
return DCAMERA_OK;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user