From c5950ce3d9958c3916013e934651cbbd820f11fb Mon Sep 17 00:00:00 2001 From: cmhu <2657262686@qq.com> Date: Thu, 17 Oct 2024 15:51:13 +0800 Subject: [PATCH] 修改任务结束的判断方式:任务全流程结束才算结束,避免重复利用task_id时,新创建任务会导致原未完成任务在算法处理中崩溃的问题 --- src/ai_platform/MultiSourceProcess.cpp | 35 +++++++++++++++++++++-------------- src/ai_platform/stl_aiplatform.cpp | 2 +- src/ai_platform/stl_aiplatform.h | 2 +- src/decoder/interface/DecoderManager.cpp | 2 +- 4 files changed, 24 insertions(+), 17 deletions(-) diff --git a/src/ai_platform/MultiSourceProcess.cpp b/src/ai_platform/MultiSourceProcess.cpp index f853582..eaf84b7 100755 --- a/src/ai_platform/MultiSourceProcess.cpp +++ b/src/ai_platform/MultiSourceProcess.cpp @@ -110,6 +110,8 @@ int CMultiSourceProcess::InitAlgorthim(tsl_aiplatform_param vptParam){ m_devId = vptParam.gpuid; + aclrtSetDevice(m_devId); + string models_dir = vptParam.models_dir; VPTProcess_PARAM vparam; @@ -305,6 +307,9 @@ int CMultiSourceProcess::GetTaskStatus(const string taskID) { DecoderManager* pDecManager = DecoderManager::getInstance(); + std::lock_guard l1(m_FinishedTaskMtx); + auto it = m_FinishedTaskMap.find(taskID); + std::vector taskids; std::vector statues; int sta = 0; @@ -312,11 +317,11 @@ int CMultiSourceProcess::GetTaskStatus(const string taskID) { taskids.emplace_back(taskID); statues.emplace_back(2); sta = 2; - } else if(pDecManager->isRunning(taskID)){ + } else if(it != m_FinishedTaskMap.end()){ taskids.emplace_back(taskID); statues.emplace_back(1); sta = 1; - } else if(pDecManager->isFinished(taskID)){ + } else if(it == m_FinishedTaskMap.end()){ taskids.emplace_back(taskID); statues.emplace_back(0); sta = 0; @@ -1207,18 +1212,20 @@ void CMultiSourceProcess::timing_snapshot_thread(){ // LOG_DEBUG("snapshot save path: {}", fpath_ori.c_str()); acldvppPicDesc *vpcDesc= acldvppCreatePicDesc(); - acldvppSetPicDescData(vpcDesc, devMem->getMem()); - acldvppSetPicDescFormat(vpcDesc, PIXEL_FORMAT_YUV_SEMIPLANAR_420); - acldvppSetPicDescWidth(vpcDesc, devMem->getWidth()); - acldvppSetPicDescHeight(vpcDesc, devMem->getHeight()); - acldvppSetPicDescWidthStride(vpcDesc, devMem->getWidthStride()); - acldvppSetPicDescHeightStride(vpcDesc, devMem->getHeightStride()); - acldvppSetPicDescSize(vpcDesc, devMem->getSize()); - - jpegUtil.jpeg_encode(vpcDesc, fpath_ori); - - acldvppDestroyPicDesc(vpcDesc); - vpcDesc = nullptr; + if(vpcDesc){ + acldvppSetPicDescData(vpcDesc, devMem->getMem()); + acldvppSetPicDescFormat(vpcDesc, PIXEL_FORMAT_YUV_SEMIPLANAR_420); + acldvppSetPicDescWidth(vpcDesc, devMem->getWidth()); + acldvppSetPicDescHeight(vpcDesc, devMem->getHeight()); + acldvppSetPicDescWidthStride(vpcDesc, devMem->getWidthStride()); + acldvppSetPicDescHeightStride(vpcDesc, devMem->getHeightStride()); + acldvppSetPicDescSize(vpcDesc, devMem->getSize()); + + jpegUtil.jpeg_encode(vpcDesc, fpath_ori); + + acldvppDestroyPicDesc(vpcDesc); + vpcDesc = nullptr; + } #ifdef POST_USE_RABBITMQ auto json_str = helpers::gen_json::gen_vtsnapshot_json(task_id, fpath_ori); diff --git a/src/ai_platform/stl_aiplatform.cpp b/src/ai_platform/stl_aiplatform.cpp index a1bceef..5ce64b6 100755 --- a/src/ai_platform/stl_aiplatform.cpp +++ b/src/ai_platform/stl_aiplatform.cpp @@ -27,7 +27,7 @@ int add_mq_conn(void *handle, mq_type_t tstatus, rabbitmq_conn_params_t mq_conn_ #endif -int get_task_status(void *handle, char *task_id) +int get_task_status(void *handle, const char *task_id) { CMultiSourceProcess* tools = (CMultiSourceProcess*)handle; return tools->GetTaskStatus(task_id); diff --git a/src/ai_platform/stl_aiplatform.h b/src/ai_platform/stl_aiplatform.h index f85881b..c32f058 100755 --- a/src/ai_platform/stl_aiplatform.h +++ b/src/ai_platform/stl_aiplatform.h @@ -46,7 +46,7 @@ extern "C" #endif - TSL_AIPLATFORM_API int get_task_status(void *handle, char *task_id); + TSL_AIPLATFORM_API int get_task_status(void *handle, const char *task_id); /************************************************************************* * FUNCTION: add_task diff --git a/src/decoder/interface/DecoderManager.cpp b/src/decoder/interface/DecoderManager.cpp index ad76ffe..1d68f58 100644 --- a/src/decoder/interface/DecoderManager.cpp +++ b/src/decoder/interface/DecoderManager.cpp @@ -372,7 +372,7 @@ bool DecoderManager::isFinished(const string name){ } LOG_ERROR("没有找到name为{}的解码器",name); - return false; + return true; } bool DecoderManager::isPausing(const string name){ -- libgit2 0.21.4