增加bTrackingPipe与bTracking互斥保护,防止输出错误

main
11566hyc 11 months ago
parent cd16b97863
commit 9730739fed

@ -907,6 +907,11 @@ void Arith_EOController::GLB_Release_Trackers(SINT32 nPipeNum)
pPipe->bTracking = FALSE;
pPipe->nDelCntThres = GLB_PIPE_DEL_MIN_STARE;
}
if (pPipe->bTrackingPipe)
{
pPipe->bTrackingPipe = FALSE;
pPipe->nDelCntThres = GLB_PIPE_DEL_MIN_STARE;
}
pPipe->nShowPipeID = 0;//清空外部显示批号
}
}

@ -13,9 +13,6 @@ void Arith_EOController::Proc_MOTLock(GD_VIDEO_FRAME_S img, GLB_INPUT & g_Input,
#if 1
// 管道队列
PIPE* pPipeArray = g_GLB_PipeProc->getPipeArray();
// 原跟踪管道跟踪器所有权转移给当前锁定管道后续的资源释放交给g_GLB_Trackers[nChoicePipeID] 这条管道
auto tracker = g_GLB_Trackers[g_GLB_stPara.nLockPipeInd];
if (g_GLB_stPara.stLockCtrl == LockMode::LOCK_POINT)
{
// 找到点选的附近告警管道
@ -58,7 +55,7 @@ void Arith_EOController::Proc_MOTLock(GD_VIDEO_FRAME_S img, GLB_INPUT & g_Input,
pPipe->bTracking = true;
pPipe->nDelCntThres = GLB_FRM_FREQ; //辅跟踪目标记忆1S
g_GLB_stPara.bEnForceGuide = FALSE; //强制提取复位
g_GLB_stPara.stLockCtrl = LOCK_NONE; //锁定标记复位
//tracker->ResetByBackPipe(&pPipeArray[nChoicePipeID], img, &g_Input, 1);
//g_GLB_PipeProc->DelPipe(&pPipeArray[nChoicePipeID]);
@ -68,7 +65,7 @@ void Arith_EOController::Proc_MOTLock(GD_VIDEO_FRAME_S img, GLB_INPUT & g_Input,
//g_GLB_stPara.nStatus = GLB_STATUS_TRACK;
}
g_GLB_stPara.stLockCtrl = LOCK_NONE; //锁定标记复位
}
return;
@ -258,7 +255,11 @@ BBOOL Arith_EOController::Arith_Status_MOTRACK(GD_VIDEO_FRAME_S img, GLB_INPUT&
// 管道队列
PIPE* pPipeArray = g_GLB_PipeProc->getPipeArray();
SINT32 nPipeArrayLen = g_GLB_stPara.nPipeMaxNum;
// 目标系统相关的其他信息计算
Arith_CalcTargetSysInfo(pFrameTargetArray, nFrmTargetNum, g_Input);
// MOT管道处理
g_GLB_PipeProc->Run(pFrameTargetArray, nFrmTargetNum, GLB_STATUS_TRACK, g_Input);
// 执行MOT
//SINT32 nTrackingNum = MultiTargteTrack(img, g_GLB_PipeProc, g_GLB_Trackers, &g_Input, nPipeArrayLen, &g_stArithPara);
// 取被锁定的单目标管道
@ -296,11 +297,7 @@ BBOOL Arith_EOController::Arith_Status_MOTRACK(GD_VIDEO_FRAME_S img, GLB_INPUT&
// 处理锁定指令,初始化跟踪
Proc_MOTLock(img, g_Input, g_para);
// 目标系统相关的其他信息计算
Arith_CalcTargetSysInfo(pFrameTargetArray, nFrmTargetNum, g_Input);
// MOT管道处理
g_GLB_PipeProc->Run(pFrameTargetArray, nFrmTargetNum, GLB_STATUS_TRACK, g_Input);
if (nTrackingNum > 1)
{

@ -118,7 +118,7 @@ SINT32 Arith_EOController::Proc_SearchLock(GD_VIDEO_FRAME_S img, GLB_INPUT & g_I
// 管道标记为跟踪
pLockPipe->bTrackingPipe = true;
pLockPipe->bTracking = FALSE;//防止后续显示错误
// 转入跟踪状态
g_GLB_stPara.stLockCtrl = LOCK_NONE; //锁定标记复位
g_GLB_stPara.bEnForceGuide = FALSE; //强制提取复位

@ -139,7 +139,7 @@ void Arith_EOController::Proc_SOTLock_NoRemainID(GD_VIDEO_FRAME_S img, GLB_INPUT
// 转移跟踪状态
pNewLockPipe->bTrackingPipe = true;
pNewLockPipe->bTracking = false;
// 删除原目标管道
g_GLB_PipeProc->DelPipe(pOldPipe);
@ -176,7 +176,7 @@ void Arith_EOController::Proc_SOTLock_NoRemainID(GD_VIDEO_FRAME_S img, GLB_INPUT
// 转移跟踪状态
pNewLockPipe->bTrackingPipe = true;
pNewLockPipe->bTracking = false;
// 删除原目标管道
g_GLB_PipeProc->DelPipe(pOldPipe);

@ -90,6 +90,7 @@ bool SA_Tracker::Init(UINT16* pSrc, SINT32 nWidth, SINT32 nHeight, PIPE* pTracki
// 标记为跟踪管道
m_LockingPipe->bTrackingPipe = true;
m_LockingPipe->bTracking = false;
SINT32 nEnd = m_LockingPipe->ubEnd;
SINT32 nObjSize = (SINT32)(m_LockingPipe->ObjectFilter.fPxlsCnt);
TARGET_OBJECT* pTrackingTarget = &m_LockingPipe->objHistoryList[nEnd];

@ -206,7 +206,7 @@ bool Tracker::ResetByBackPipe(PIPE* pNewPipe, GD_VIDEO_FRAME_S img, GLB_INPUT* p
// 恢复跟踪标记
pPipeOld->bTrackingPipe = true;
pPipeOld->bTracking = false;
// 新管道被eat,需完全删除交外部执行tracker没这个权限。

@ -474,7 +474,10 @@ void ARIDLL_OutputPipeTarget(Arith_EOController* pArith, ARIDLL_OUTPUT* pstOutpu
{
obj.nOutputID = pPipe->nGuideBatchID;
}
if (pPipe->bTrackingPipe)
{
pPipe->bTracking = FALSE;
}
// 跟踪目标送进跟踪队列
if (pPipe->bTrackingPipe || pPipe->bTracking)
{
@ -487,7 +490,7 @@ void ARIDLL_OutputPipeTarget(Arith_EOController* pArith, ARIDLL_OUTPUT* pstOutpu
}
else
{
if (0 < pPipe->nShowPipeID)
if (1 < pPipe->nShowPipeID)
{
obj.nOutputID = pPipe->nShowPipeID;
}
@ -497,6 +500,10 @@ void ARIDLL_OutputPipeTarget(Arith_EOController* pArith, ARIDLL_OUTPUT* pstOutpu
{
continue;//最大到255
}
if (pArith->g_TrackCurrentID < 2)
{
pArith->g_TrackCurrentID = 2;//防错
}
pPipe->nShowPipeID = pArith->g_TrackCurrentID;
obj.nOutputID = pPipe->nShowPipeID;
pArith->g_TrackCurrentID++;

Loading…
Cancel
Save