Leave_Over Detect

本文介绍了一种基于剔除运动的学习方法实现遗留物检测的技术方案。该方案通过设定遗留时间和目标大小等参数来更新背景模型,当检测到的遗留物被移除后,能够自动从列表中删除相关信息。此外,文中还提到了开发类和MFC界面的具体步骤。

 今晚搞定。

需要有遗留时间,目标大小的输入参数。背景用剔除运动的学习,达到遗留时间更新背景,当遗留物拿走,把目标从遗留物列表删除。所以遗留物的信息还应包括位置。

写一个类,测试通过,再做一个MFC。

FUNC(Std_ReturnType, SOAD_CODE) SoAd_IfTransmit ( PduIdType SoAdSrcPduId, P2CONST(PduInfoType, AUTOMATIC, SOAD_APPL_DATA) SoAdSrcPduInfoPtr ) { Std_ReturnType RetVal = E_NOT_OK; DBG_SOAD_IFTRANSMIT_ENTRY(SoAdSrcPduId, SoAdSrcPduInfoPtr); #if(SOAD_DEV_ERROR_DETECT == STD_ON) if(SoAd_Initialized == SOAD_UNINITED) { SOAD_DET_REPORT_ERROR(SOAD_IFTRANSMIT_SVCID, SOAD_E_NOTINIT); } else if(SoAdSrcPduId >= SoAd_PBcfg->PduRouteCnt) { SOAD_DET_REPORT_ERROR(SOAD_IFTRANSMIT_SVCID, SOAD_E_INV_PDUID); } else if(SOAD_FLAG(&SOAD_CFG(PduRoute,SoAdSrcPduId), SOAD_PDUROUTE_FLAG_IS_UL_TP)) { SOAD_DET_REPORT_ERROR(SOAD_IFTRANSMIT_SVCID, SOAD_E_INV_PDUID); } else if(SoAdSrcPduInfoPtr == NULL_PTR) { SOAD_DET_REPORT_ERROR(SOAD_IFTRANSMIT_SVCID, SOAD_E_PARAM_POINTER); } else if(SoAdSrcPduInfoPtr->SduLength == 0U) { /* !LINKSTO SoAd.dsn.Udp.Tx.If.SduLengthNull.NotOK, 1 */ SOAD_DET_REPORT_ERROR(SOAD_IFTRANSMIT_SVCID, SOAD_E_INV_ARG); } else #endif /* SOAD_DEV_ERROR_DETECT == STD_ON */ { const SoAd_RouteIdType PduRouteId = SOAD_TX_PDUID_TO_PDUROUTE_ID(SoAdSrcPduId); CONSTP2CONST(SoAd_PduRouteType, AUTOMATIC, SOAD_APPL_DATA) PduRoutePtr = &SOAD_CFG(PduRoute, PduRouteId); const SoAd_PduRouteDestVirtualIdType PduRouteDestCnt = PduRoutePtr->PduRouteDestVirtualCnt; const SoAd_PduRouteDestVirtualIdType PduRouteDestLastId = PduRoutePtr->PduRouteDestVirtualFirstId + PduRouteDestCnt; #if(SOAD_META_DATA_HANDLING == STD_ON) SoAd_SoConIdType SoConId_EcuC = SOAD_INVALID_SOCON_ID; #endif #if(SOAD_META_DATA_HANDLING == STD_ON) if(SOAD_FLAG(PduRoutePtr, SOAD_PDUROUTE_FLAG_METADATA_SOCON_ID)) { RetVal = EcuC_GetMetaDataSoConId(PduRoutePtr->EcuCPduId, SoAdSrcPduInfoPtr, &SoConId_EcuC); } else { RetVal = E_OK; } if(E_OK == RetVal) #endif { uint32 NextPduRouteDestVirtualId = 0U; uint32 StartBit = (uint32)PduRoutePtr->PduRouteDestVirtualFirstId - 1U; boolean AtLeastOneDestinationCalled = FALSE; boolean AtLeastOneSuccess = FALSE; boolean AtLeastOneFailure = FALSE; /*Start Lookup at first Virtual Destination assosiated with this pduRoute*/ CONSTP2VAR(uint32, AUTOMATIC, SOAD_APPL_DATA) PduRouteDestTxBitMapPtr = &SOAD_PBRAM_REF_ID(uint32, SoAd_PBcfg->PduRouteDestVirtualTxEnabledBitMapBase, 0U); #if(SOAD_META_DATA_HANDLING == STD_ON) RetVal = E_NOT_OK; #endif /* loop over all pduRouteDests related to this PduRoutePtr */ /* Deviation MISRAC2012-3 */ for(SOAD_COMSTACK_BF_ITERATE(NextPduRouteDestVirtualId, &PduRouteDestTxBitMapPtr[0U], StartBit, PduRouteDestLastId)) { CONSTP2CONST(SoAd_PduRouteDestVirtualType, AUTOMATIC, SOAD_APPL_DATA) PduRouteDestVirtualPtr = &SOAD_CFG(PduRouteDestVirtual, NextPduRouteDestVirtualId); CONSTP2CONST(SoAd_SoConType, AUTOMATIC, SOAD_APPL_DATA) SoConPtr = &SOAD_CFG(SoCon, PduRouteDestVirtualPtr->SoConId); CONSTP2VAR(SoAd_SoConStateType, AUTOMATIC, SOAD_APPL_DATA) SoConStatePtr = &SOAD_PBRAM(SoConState, PduRouteDestVirtualPtr->SoConId); Std_ReturnType RetVal_PduRouteDestTarget = E_NOT_OK; #if(SOAD_META_DATA_HANDLING == STD_ON) if( !SOAD_FLAG(PduRoutePtr, SOAD_PDUROUTE_FLAG_METADATA_SOCON_ID) || SoConId_EcuC == PduRouteDestVirtualPtr->SoConId ) #endif { const boolean IsTcp = SOAD_FLAG(SoConPtr, SOAD_SOCON_FLAG_IS_TCP); AtLeastOneDestinationCalled = TRUE; if(IsTcp) { RetVal_PduRouteDestTarget = SoAd_IfTransmitPduRouteDestTcp ( SoConPtr, SoConStatePtr, SoAdSrcPduInfoPtr, PduRouteDestVirtualPtr ); } else { RetVal_PduRouteDestTarget = SoAd_IfTransmitPduRouteDestUdp ( SoConPtr, SoConStatePtr, SoAdSrcPduInfoPtr, PduRouteDestVirtualPtr ); } if (E_OK == RetVal_PduRouteDestTarget) { AtLeastOneSuccess = TRUE; } else { AtLeastOneFailure = TRUE; } #if(SOAD_META_DATA_HANDLING == STD_ON) if(SOAD_FLAG(PduRoutePtr, SOAD_PDUROUTE_FLAG_METADATA_SOCON_ID)) { /* Leave loop after transmission is done for dedicated SoConId */ break; } #endif } } /* If SOAD_PDUROUTE_FANOUT_RETVAL_OR_CONTROLLED is set E_OK shall be returned * if at least one transmission succeeds. */ /* !LINKSTO SoAd.dsn.Func0146.Fanout.FanOutRetValueOrControlled, 1 */ if (SOAD_FLAG(PduRoutePtr, SOAD_PDUROUTE_FANOUT_RETVAL_OR_CONTROLLED)) { RetVal = AtLeastOneSuccess ? E_OK : E_NOT_OK; } else { RetVal = AtLeastOneFailure ? E_NOT_OK : E_OK; } /* In case something went wrong, SoAd_IfTransmit shall return E_NOT_OK and there shall be no * transmit confirmation! Since some of the transmissions might have been successful, their * state shall be set to IDLE so no confirmation is passed to the upper layer */ if(RetVal == E_NOT_OK) { SoAd_IfTransmitSkipConf(SoAdSrcPduId); } /* if the RoutingGroups of all PduRouteDests are deactivated, E_NOT_OK shall be returned */ if(!AtLeastOneDestinationCalled) { RetVal = E_NOT_OK; } } } DBG_SOAD_IFTRANSMIT_EXIT(RetVal, SoAdSrcPduId, SoAdSrcPduInfoPtr); return RetVal; }
07-31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值