📄 新建 文本文档.txt
字号:
回掉函数
int WINAPI cb_FindCar(int iChanel)
{
try{
BYTE iNum = MyPathCfg.GetSize();
for(int i=0;i<iNum;i++)
{
if(((CFireCls*)MyPathCfg[i])->vNear-1==iChanel)
{
((CFireCls*)MyPathCfg[i])->CapNearOk=TRUE;
((CFireCls*)MyPathCfg[i])->CapStartTime=GetTickCount();
if(TWOWAY)
{
int fly1=(int)pow(2,((CFireCls*)MyPathCfg[i])->vThree-1);
int* pfly = VC_CapImgToCard(fly1);
if(pfly)
((CFireCls*)MyPathCfg[i])->MilBuffThree = *(pfly+((CFireCls*)MyPathCfg[i])->vThree-1);
else
((CFireCls*)MyPathCfg[i])->MilBuffThree = -1;
if(((CFireCls*)MyPathCfg[i])->MilBuffThree<0)
((CFireCls*)MyPathCfg[i])->CapThreeOk=FALSE;
else
((CFireCls*)MyPathCfg[i])->CapThreeOk=TRUE;
}
int fly1=(int)pow(2,((CFireCls*)MyPathCfg[i])->vFar-1);
int* pfly = VC_CapImgToCard(fly1);
if(pfly)
((CFireCls*)MyPathCfg[i])->MilBuffFar = *(pfly+((CFireCls*)MyPathCfg[i])->vFar-1);
else
((CFireCls*)MyPathCfg[i])->MilBuffFar = -1;
if(((CFireCls*)MyPathCfg[i])->MilBuffFar<0)
{
((CFireCls*)MyPathCfg[i])->CapFarOk=FALSE;
}
else
((CFireCls*)MyPathCfg[i])->CapFarOk=TRUE;
if(ADDTAIL)
{
int fly1=(int)pow(2,((CFireCls*)MyPathCfg[i])->vTail-1);
int* pfly = VC_CapImgToCard(fly1);
if(pfly)
((CFireCls*)MyPathCfg[i])->MilBuffTail = *(pfly+((CFireCls*)MyPathCfg[i])->vTail-1);
else
((CFireCls*)MyPathCfg[i])->MilBuffTail = -1;
if(((CFireCls*)MyPathCfg[i])->MilBuffTail<0)
// if(VC_CaptureImage(PBYTE(m_hImgTail),((CFireCls*)MyPathCfg[i])->vTail-1, TRUE)<0)
((CFireCls*)MyPathCfg[i])->CapTailOk=FALSE;
else
((CFireCls*)MyPathCfg[i])->CapTailOk=TRUE;
}
int BuffIndex;
BuffIndex=VC_GetFreeBuffIndex();
if (BuffIndex==-1)
{
VC_ResetBuffUseState(&((CFireCls*)MyPathCfg[i])->MilBuffNear);
VC_ResetBuffUseState(&((CFireCls*)MyPathCfg[i])->MilBuffFar);
VC_ResetBuffUseState(&((CFireCls*)MyPathCfg[i])->MilBuffTail);
VC_ResetBuffUseState(&((CFireCls*)MyPathCfg[i])->MilBuffThree);
WriteErrorRec("图像缓存用完!",1);
NoneImgBuff++;
if(NoneImgBuff>40)
{
CMainFrame * myApp;
CQkjkView * myDlg;
myApp=(CMainFrame *)AfxGetApp()->m_pMainWnd;
if (myApp!=NULL)
{
myDlg = (CQkjkView *)myApp->GetActiveView();
if(myDlg!=NULL)
{
WriteErrorRec("处理程序无法正常运行,重新启动计算机!",2);
myDlg->CapRestart=TRUE;
myDlg->PostMessage(WM_CLOSE,0,0);
}
else
{ WriteErrorRec("出错!",0);
iCapError++;
if(iCapError>20)
ReStartWindows();
}
}
else
{
WriteErrorRec("出错2!",0);
iCapError++;
if(iCapError>20)
ReStartWindows();
}
}
else
{
NoneImgBuff++;
}
}
else
{
NoneImgBuff=0;
//A SetBuffUseState(BuffIndex);
CProcessCls *tmp=new CProcessCls;
tmp->BuffIndex=BuffIndex;
if (tmp==NULL) return -1;
tmp->PathNum=i;
tmp->VehClr=3;
tmp->VehSd=0;
tmp->VehType=0;
tmp->bNiXing =FALSE;
tmp->lpn="";
tmp->bVideoExits=TRUE;
if (((CFireCls*)MyPathCfg[i])->CapNearOk)
{
g_uSuNum[i]++;//抓拍成功计数
tmp->MilBuffNear=((CFireCls*)MyPathCfg[i])->MilBuffNear;
tmp->CapNearOk =((CFireCls*)MyPathCfg[i])->CapNearOk;
}
/************************************************************************/
/*同向两车道 */
/************************************************************************/
if(TWOWAY)
{
if (((CFireCls*)MyPathCfg[i])->CapThreeOk)
{
tmp->MilBuffThree=((CFireCls*)MyPathCfg[i])->MilBuffThree;
tmp->CapThreeOk =((CFireCls*)MyPathCfg[i])->CapThreeOk;
}
}
/************************************************************************/
if (((CFireCls*)MyPathCfg[i])->CapFarOk)
{
tmp->MilBuffFar=((CFireCls*)MyPathCfg[i])->MilBuffFar;
tmp->CapFarOk =((CFireCls*)MyPathCfg[i])->CapFarOk;
}
if( ADDTAIL )
{
if (((CFireCls*)MyPathCfg[i])->CapTailOk)
{
tmp->MilBuffTail=((CFireCls*)MyPathCfg[i])->MilBuffTail;
tmp->CapTailOk =((CFireCls*)MyPathCfg[i])->CapTailOk;
}
}
tmp->CapTime=COleDateTime::GetCurrentTime();
((CFireCls*)MyPathCfg[i])->CapFarOk=FALSE;
((CFireCls*)MyPathCfg[i])->CapNearOk=FALSE;
((CFireCls*)MyPathCfg[i])->CapThreeOk=FALSE;
((CFireCls*)MyPathCfg[i])->EnterFirst=FALSE;
((CFireCls*)MyPathCfg[i])->MilBuffFar=-1;
((CFireCls*)MyPathCfg[i])->MilBuffNear=-1;
((CFireCls*)MyPathCfg[i])->MilBuffTail=-1;
((CFireCls*)MyPathCfg[i])->MilBuffThree=-1;
((CFireCls*)MyPathCfg[i])->Spd=0;
((CFireCls*)MyPathCfg[i])->VehType=0;
((CFireCls*)MyPathCfg[i])->EnterTime =0;
((CFireCls*)MyPathCfg[i])->LastProcessTime =GetTickCount();
tmp->CapPastTme= ((CFireCls*)MyPathCfg[i])->CapStartTime;
// TRACE("Enter my critical section!\n");
EnterCriticalSection(&MyCritSec);
MyProcess.AddTail(tmp);
LeaveCriticalSection(&MyCritSec);
// TRACE("Leave my critical section!\n");
SetEvent(hProcessNotify);
}
break;
}
}
}catch (...) {
WriteErrorRec("cb_FindCar",0);
}
return 0;
}
//视频检测县城
UINT VideoExitsThread(LPVOID lpData)
{
WriteErrorRec("视频检测线程开启",0);
if(!lpData)
{
bUsedVideo[0] = FALSE;
bUsedVideo[1] = FALSE;
WriteErrorRec("视频检测线程关闭--err",0);
return 1;
}
BYTE PNum=MyPathCfg.GetSize();
VIDEOEXITS* pVE=(VIDEOEXITS*)lpData;
int iRoad = pVE->iRoad;
if(iRoad==1)
bUsedVideo[0] = TRUE;
else if(iRoad==2)
bUsedVideo[1] = TRUE;
else
{
bUsedVideo[0] = FALSE;
bUsedVideo[1] = FALSE;
WriteErrorRec("视频检测线程关闭--err",0);
return 2;
}
if (MyPathCfg[0]==NULL)
{
bUsedVideo[0] = FALSE;
bUsedVideo[1] = FALSE;
WriteErrorRec("视频检测线程关闭--err",0);
return 6;
}
while(!pVE->bExit)
{
try{
try{
try{
int fly1=(int)pow(2,pVE->iChanel[pVE->iRoad-1]);
int* pfly = VC_CapImgToCard(fly1);//
if(pfly)
((CFireCls*)MyPathCfg[pVE->iRoad-1])->MilBuffNear = *(pfly+pVE->iChanel[pVE->iRoad-1]);
else
{
WriteLog("MilBufNear=NULL",0);
((CFireCls*)MyPathCfg[pVE->iRoad-1])->MilBuffNear = -1;
}
}catch (...) {
WriteErrorRec("Adlink-GetBuf0",0);
VC_ResetBuffUseState(&((CFireCls*)MyPathCfg[pVE->iRoad-1])->MilBuffNear);
continue;
}
try{
if(((CFireCls*)MyPathCfg[pVE->iRoad-1])->MilBuffNear>=0)
{
((CFireCls*)MyPathCfg[pVE->iRoad-1])->CapNearOk = TRUE;
try{
VC_GetBufFromCard(&(((CFireCls*)MyPathCfg[pVE->iRoad-1])->MilBuffNear),PBYTE(m_hImgVideo),false,"",false);
}catch(...) {
WriteErrorRec("Adlink-GetBuf1",0);
VC_ResetBuffUseState(&((CFireCls*)MyPathCfg[pVE->iRoad-1])->MilBuffNear);
continue;
}
}
else
{
WriteErrorRec("Adlink-CapFailed",0);
((CFireCls*)MyPathCfg[pVE->iRoad-1])->CapNearOk = FALSE;
VC_ResetBuffUseState(&((CFireCls*)MyPathCfg[pVE->iRoad-1])->MilBuffNear);
continue;
}
}catch(...){
((CFireCls*)MyPathCfg[pVE->iRoad-1])->CapNearOk = FALSE;
VC_ResetBuffUseState(&((CFireCls*)MyPathCfg[pVE->iRoad-1])->MilBuffNear);
WriteErrorRec("Adlink-GetBuf2",0);
continue;
}
try{
if(((CFireCls*)MyPathCfg[pVE->iRoad-1])->CapNearOk){
// int iRst=VC_CaptureImage(PBYTE(m_hImgVideo),pVE->iChanel[pVE->iRoad-1]);
if(ve_CheckCar(PBYTE(m_hImgVideo))<=0)
VC_ResetBuffUseState(&((CFireCls*)MyPathCfg[pVE->iRoad-1])->MilBuffNear);
if(theApp.pRectWnd && !pVE->bExit)
{
RECT vRect;
CDC* pDC=theApp.pRectWnd->GetDlgItem(IDC_VIDEO)->GetDC();
theApp.pRectWnd->GetDlgItem(IDC_VIDEO)->GetClientRect(&vRect);
// CopyMemory(&vRect, &(pVE->vRect[0]), sizeof(RECT));
HDC hDC=pDC->GetSafeHdc();
ve_Draw(PBYTE(m_hImgVideo),hDC,vRect.left,vRect.top ,vRect.right-vRect.left,vRect.bottom-vRect.top);
theApp.pRectWnd->ReleaseDC(pDC);
}
}
}catch(...){
VC_ResetBuffUseState(&((CFireCls*)MyPathCfg[pVE->iRoad-1])->MilBuffNear);
WriteErrorRec("Adlink-GetBuf3",0);
continue;
}
}
catch(...)
{
}
}catch(...){
WriteErrorRec("VideoExits",0);
}
}
bUsedVideo[0] = FALSE;
bUsedVideo[1] = FALSE;
WriteErrorRec("视频检测线程关闭",0);
return 0;
}
开启
if(0!=ve_Init(cb_FindCar,1,HM_IMGWIDTH*HM_IMGHEIGHT*3+54,g_ve.dwMinTwoCapTime,g_ve.dwMaxCapTime))
{
WriteErrorRec("视频检测模块初始化失败",2);
}
///开始
int road = 2;
g_ve.iRoad = road;
g_ve.iChanel[road-1] = ((CFireCls*)MyPathCfg[road-1])->vNear-1;
ve_SetShowRect(true, 255);
ve_SetExitsParams(0,((CFireCls*)MyPathCfg[road-1])->vNear-1, g_ve.eRect[road-1].left,g_ve.eRect[road-1].top,g_ve.eRect[road-1].right,g_ve.eRect[road-1].bottom,g_ve.iGray[road-1],g_ve.iDif[road-1],g_ve.dwMinTwoCapTime);
AfxBeginThread(VideoExitsThread,&g_ve);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -