diff --git a/src/ai_platform/det_obj_header.h b/src/ai_platform/det_obj_header.h index 53d87a0..0df5681 100755 --- a/src/ai_platform/det_obj_header.h +++ b/src/ai_platform/det_obj_header.h @@ -10,6 +10,8 @@ #include #include +#include "sy_common.h" + #include "../util/vpc_util.h" using namespace std; diff --git a/src/ai_platform/header.h b/src/ai_platform/header.h index 59d867f..f2d5b3c 100755 --- a/src/ai_platform/header.h +++ b/src/ai_platform/header.h @@ -9,7 +9,7 @@ #endif -#include "sy_common.h" + #include #include #include diff --git a/src/ai_platform/mvpt.cpp b/src/ai_platform/mvpt.cpp index 19419b0..86b14cd 100755 --- a/src/ai_platform/mvpt.cpp +++ b/src/ai_platform/mvpt.cpp @@ -245,7 +245,7 @@ bool CMultiSourceProcess::RestartTask(const string taskID){ } bool CMultiSourceProcess::FinishTask(const string taskID){ - return m_task_manager.FinishTask(taskID); + return m_task_manager.CloseDecoder(taskID); } int CMultiSourceProcess::snapshot_task(std::string& uri_or_name, const std::string& file_name, bool bInTask) { @@ -290,13 +290,13 @@ int CMultiSourceProcess::snapshot_task(std::string& uri_or_name, const std::stri return FAILED; } -int CMultiSourceProcess::SnapShot(task_param _cur_task_param, char* result_folder) +int CMultiSourceProcess::SnapShot(task_param _cur_task_param, string result_folder) { LOG_INFO("begin SnapShot task: {}", _cur_task_param.task_id); /* 拷贝通用的算法参数 */ - if (result_folder) { - CreateResultFolder(result_folder, ""); + if (!result_folder.empty()) { + CreateResultFolder(result_folder.c_str(), ""); } else { result_folder = ""; } @@ -321,10 +321,19 @@ int CMultiSourceProcess::SnapShot(task_param _cur_task_param, char* result_folde } void CMultiSourceProcess::CloseAllTask(){ - m_bfinish = true; + m_task_manager.CloseAllDecoder(); +} + +void CMultiSourceProcess::Release() { + atlas_licence_close(&(skt_handle)); //授权 - m_task_manager.Release(); + m_task_manager.CloseAllDecoder(); + while (m_task_manager.GetRunningTaskCount() > 0) { + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + } + + m_bfinish = true; if(m_pAlgorthimThread){ m_pAlgorthimThread->join(); @@ -342,14 +351,12 @@ void CMultiSourceProcess::CloseAllTask(){ int size = m_RgbDataList.size(); bool bEmpty = m_RgbDataList.empty(); + + m_task_manager.Release(); LOG_INFO("CloseAllTask exit."); } -void CMultiSourceProcess::CloseAllTask2() { - m_task_manager.Release(); -} - void CMultiSourceProcess::clear_finished_task(){// 清理已经结束的任务 std::lock_guard l1(m_FinishedTaskMtx); @@ -389,6 +396,15 @@ bool CMultiSourceProcess::finish_task(const string taskID, const bool delete_sna m_snapshot_reprocessing->release_finished_locus_snapshot(taskID); + m_task_manager.FinishTask(taskID); + + for (auto iter = m_RgbDataList.begin(); iter!=m_RgbDataList.end(); ++ iter){ + DeviceMemory* gpuMem = *iter; + if(taskID == gpuMem->getId()){ + m_RgbDataList.erase(iter); + } + } + return true; } diff --git a/src/ai_platform/mvpt.h b/src/ai_platform/mvpt.h index 0aa50e9..c87e853 100755 --- a/src/ai_platform/mvpt.h +++ b/src/ai_platform/mvpt.h @@ -34,12 +34,11 @@ public: bool PauseTask(const string taskID); bool RestartTask(const string taskID); bool FinishTask(const string taskID); + void Release(); void CloseAllTask(); - int SnapShot(task_param param, char* result_folder); + int SnapShot(task_param param, string result_folder); int CountRunningTask(); - void CloseAllTask2(); - int GetTaskStatus(const string taskID); public: diff --git a/src/ai_platform/stl_aiplatform.cpp b/src/ai_platform/stl_aiplatform.cpp index 842e0bf..fe5af72 100755 --- a/src/ai_platform/stl_aiplatform.cpp +++ b/src/ai_platform/stl_aiplatform.cpp @@ -17,7 +17,7 @@ int tsl_aiplatform_init(void **handle, tsl_aiplatform_param param) return tools->InitAlgorthim(param); } -int get_task_status(void *handle, char *task_id) +int get_task_status(void *handle, string task_id) { CMultiSourceProcess* tools = (CMultiSourceProcess*)handle; return tools->GetTaskStatus(task_id); @@ -34,7 +34,7 @@ int add_task(void *handle, task_param param) } -int pause_task(void *handle, char * task_id, const int max_timeout_ms) +int pause_task(void *handle, string task_id, const int max_timeout_ms) { int error_code = FAILED; CMultiSourceProcess* tools = (CMultiSourceProcess*)handle; @@ -45,7 +45,7 @@ int pause_task(void *handle, char * task_id, const int max_timeout_ms) } -int restart_task(void *handle, char * task_id, const int max_timeout_ms) +int restart_task(void *handle, string task_id, const int max_timeout_ms) { int error_code = FAILED; CMultiSourceProcess* tools = (CMultiSourceProcess*)handle; @@ -55,7 +55,7 @@ int restart_task(void *handle, char * task_id, const int max_timeout_ms) return error_code; } -int finish_task(void *handle, char * task_id, const int max_timeout_ms) +int finish_task(void *handle, string task_id, const int max_timeout_ms) { int error_code = FAILED; CMultiSourceProcess* tools = (CMultiSourceProcess*)handle; @@ -66,7 +66,7 @@ int finish_task(void *handle, char * task_id, const int max_timeout_ms) } // added by zsh 220801 -int screenshot_task(void *handle, task_param param, char* result_folder) +int screenshot_task(void *handle, task_param param, string result_folder) { CMultiSourceProcess* tools = (CMultiSourceProcess*)handle; return tools->SnapShot(param, result_folder); @@ -77,7 +77,7 @@ int tsl_aiplatform_release(void **handle) if (*handle) { CMultiSourceProcess* tools = (CMultiSourceProcess*)*handle; - tools->CloseAllTask(); + tools->Release(); delete tools; tools = NULL; @@ -94,7 +94,7 @@ int count_running_task(void *handle) void close_all_task(void *handle) { CMultiSourceProcess* tools = (CMultiSourceProcess*)handle; - tools->CloseAllTask2(); + tools->CloseAllTask(); } const char* get_tsl_aiplatform_version() diff --git a/src/ai_platform/stl_aiplatform.h b/src/ai_platform/stl_aiplatform.h index 6189939..fd8a052 100755 --- a/src/ai_platform/stl_aiplatform.h +++ b/src/ai_platform/stl_aiplatform.h @@ -16,6 +16,7 @@ #else #define TSL_AIPLATFORM_API __attribute__ ((visibility ("default"))) #endif + #include "header.h" @@ -33,7 +34,7 @@ extern "C" TSL_AIPLATFORM_API int tsl_aiplatform_init(void **handle, tsl_aiplatform_param param); - TSL_AIPLATFORM_API int get_task_status(void *handle, char *task_id); + TSL_AIPLATFORM_API int get_task_status(void *handle, string task_id); /************************************************************************* * FUNCTION: add_task @@ -56,7 +57,7 @@ extern "C" * RETURN: * NOTES: *************************************************************************/ - TSL_AIPLATFORM_API int pause_task(void *handle, char * task_id, const int max_timeout_ms); + TSL_AIPLATFORM_API int pause_task(void *handle, string task_id, const int max_timeout_ms); /************************************************************************* @@ -68,7 +69,7 @@ extern "C" * RETURN: * NOTES: *************************************************************************/ - TSL_AIPLATFORM_API int restart_task(void *handle, char * task_id, const int max_timeout_ms); + TSL_AIPLATFORM_API int restart_task(void *handle, string task_id, const int max_timeout_ms); /************************************************************************* @@ -80,7 +81,7 @@ extern "C" * RETURN: * NOTES: *************************************************************************/ - TSL_AIPLATFORM_API int finish_task(void *handle, char * task_id, const int max_timeout_ms); + TSL_AIPLATFORM_API int finish_task(void *handle, string task_id, const int max_timeout_ms); /************************************************************************* @@ -92,7 +93,7 @@ extern "C" * RETURN: 成功/失败 * NOTES: *************************************************************************/ - TSL_AIPLATFORM_API int screenshot_task(void *handle, task_param param, char* result_folder); + TSL_AIPLATFORM_API int screenshot_task(void *handle, task_param param, string result_folder); /************************************************************************* diff --git a/src/ai_platform/task_manager.cpp b/src/ai_platform/task_manager.cpp index 1d0f8da..c23b5bc 100644 --- a/src/ai_platform/task_manager.cpp +++ b/src/ai_platform/task_manager.cpp @@ -119,6 +119,28 @@ bool task_manager::FinishTask(const string& task_id){ return true; } +bool task_manager::CloseDecoder(const string& task_id){ + LOG_INFO("CloseDecoder:{}",task_id); + auto it = task_info_map.find(task_id); + if(it == task_info_map.end()) { + return false; + } + + TaskInfo& info = task_info_map[task_id]; + info.dec->close(); + + return true; +} + +bool task_manager::CloseAllDecoder() { + for (auto it = task_info_map.begin(); it != task_info_map.end(); it++) + { + TaskInfo& info = it->second; + info.dec->close(); + } + return true; +} + bool task_manager::GetResolution(const string& task_id, int &width, int &height ) { auto it = task_info_map.find(task_id); if(it == task_info_map.end()) { @@ -172,7 +194,17 @@ bool task_manager::IsFinished(const string& task_id){ } int task_manager::GetRunningTaskCount() { - return task_info_map.size(); + int count = 0; + for (auto it = task_info_map.begin(); it != task_info_map.end(); it++) + { + TaskInfo& info = it->second; + if (!info.dec->isFinished()) + { + count++; + } + } + + return count; } void task_manager::Release() { diff --git a/src/ai_platform/task_manager.h b/src/ai_platform/task_manager.h index a9bc60c..888d398 100644 --- a/src/ai_platform/task_manager.h +++ b/src/ai_platform/task_manager.h @@ -35,6 +35,9 @@ public: bool FinishTask(const string& task_id); bool StartTask(const string& task_id); + bool CloseDecoder(const string& task_id); + bool CloseAllDecoder(); + bool GetResolution(const string& task_id, int &width, int &height ); bool SetDecKeyframe(const string& task_id, bool bKeyframe); diff --git a/src/demo/demo.cpp b/src/demo/demo.cpp index dfe1099..6dbd7af 100755 --- a/src/demo/demo.cpp +++ b/src/demo/demo.cpp @@ -150,7 +150,7 @@ string createTask(void *handle, int gi, bool bFlag = true){ nTaskId = gi; } std::string task_id_str = "test_task_id_" + std::to_string(nTaskId); - tparam.task_id = task_id_str.c_str(); + tparam.task_id = task_id_str; nTaskId++; tparam.result_folder_little = "./res"; //目标快照抠图保存地址 @@ -159,7 +159,7 @@ string createTask(void *handle, int gi, bool bFlag = true){ const int result_code = add_task(handle, tparam); if (result_code != 0) printf("[Error]: "); - printf("--- task_id: %s result code: %d\n", tparam.task_id, result_code); + printf("--- task_id: %s result code: %d\n", tparam.task_id.c_str(), result_code); return task_id_str; } @@ -283,11 +283,32 @@ void test_gpu(int gpuID){ // createTask(handle, algor_vec2, 24, false); // createTask(handle, algor_vec2, 30, false); // createTask(handle, algor_vec2, 31, false); - createTask(handle, 4, false); + string task_id = createTask(handle, 4, false); - while (getchar() != 'q'); + bool bFlag = true; + while (bFlag){ + char op = getchar(); + switch (op) + { + case 'a': + task_id = createTask(handle, 4, false); + break; + case 'c': + finish_task(handle, task_id, 0); + break; + case 'g': + close_all_task(handle); + break; + case 'q': + close_all_task(handle); + bFlag = false; + break; + default: + break; + } + } - tsl_aiplatform_release(&handle); + tsl_aiplatform_release(&handle); } int main(int argc, char *argv[]) {