Int32 NullSrcLink_drvProcessFrames(NullSrcLink_Obj * pObj) { System_LinkQueInfo *pChInfo; FVID2_FrameList frameList; UInt32 chId; FVID2_Frame *pFrame; Int32 status; static UInt32 StartTime = 0; pChInfo = &pObj->createArgs.inputInfo; frameList.numFrames = 0; if ((Utils_getCurTimeInMsec() - StartTime) > 5 * 1000) { //NullSrcLink_fillDataPattern(&pObj->outFormat, pObj->outFrames, 1); StartTime = Utils_getCurTimeInMsec(); Vps_printf("NullSrcLink_fillDataPattern ......NullSrcGetEmptyFrameNum:%d\n",s_NullSrcGetEmptyFrameNum); Utils_bufPrintStatus("NullSrcLink",&pObj->bufOutQue); } for (chId = 0; chId < pChInfo->numCh; chId++) { status = Utils_bufGetEmptyFrame(&pObj->bufOutQue, &pFrame, BIOS_NO_WAIT); if (status != FVID2_SOK) continue; s_NullSrcGetEmptyFrameNum++; frameList.frames[frameList.numFrames] = pFrame; frameList.numFrames++; pFrame->channelNum = chId; pFrame->timeStamp = Utils_getCurTimeInMsec(); if (pChInfo->chInfo[chId].scanFormat == FVID2_SF_INTERLACED) { pFrame->fid = pObj->chNextFid[chId]; pObj->chNextFid[chId] ^= 1; } } Utils_bufPutFull(&pObj->bufOutQue, &frameList); System_sendLinkCmd(pObj->createArgs.outQueParams.nextLink, SYSTEM_CMD_NEW_DATA); return FVID2_SOK; }
Int32 AlgLink_algProcessData(AlgLink_Obj * pObj) { UInt32 frameId; System_LinkInQueParams *pInQueParams; FVID2_Frame *pFrame; FVID2_FrameList frameList; pInQueParams = &pObj->createArgs.inQueParams; System_getLinksFullFrames(pInQueParams->prevLinkId, pInQueParams->prevLinkQueId, &frameList); if (frameList.numFrames) { /* SCD should be done first as it requires to operate on raw YUV */ if (pObj->createArgs.enableSCDAlg) { AlgLink_ScdalgProcessData(&pObj->scdAlg, &frameList, &pObj->outObj[0].bufOutQue); #if 0 if (status == FVID2_SOK) { /* Send-out the output bitbuffer */ System_sendLinkCmd(pObj->createArgs.outQueParams[ALG_LINK_SCD_OUT_QUE].nextLink, SYSTEM_CMD_NEW_DATA); } #endif } for(frameId=0; frameId<frameList.numFrames; frameId++) { pFrame = frameList.frames[frameId]; if(pFrame->channelNum >= pObj->inQueInfo.numCh) continue; // do SW OSD if (pObj->createArgs.enableOSDAlg) { AlgLink_OsdalgProcessFrame(&pObj->osdAlg, pFrame); } } System_putLinksEmptyFrames(pInQueParams->prevLinkId, pInQueParams->prevLinkQueId, &frameList); } return FVID2_SOK; }
static Void IpcFramesInLink_prdCalloutFcn(UArg arg) { IpcFramesInLink_Obj *pObj = (IpcFramesInLink_Obj *) arg; Int32 status; status = System_sendLinkCmd(pObj->tskId, SYSTEM_CMD_NEW_DATA); if (UTILS_ISERROR(status)) { #ifdef SYSTEM_DEBUG_CMD_ERROR UTILS_warn("IPCFRAMEINLINK:[%s:%d]:" "System_sendLinkCmd SYSTEM_IPC_CMD_RELEASE_FRAMES failed" "errCode = %d", __FILE__, __LINE__, status); #endif } }
Int32 IpcFramesInLink_processFrameBufs(IpcFramesInLink_Obj * pObj) { FVID2_Frame *pFrameBuf; SystemIpcFrames_ListElem *pListElem; UInt32 numFrameBufs; Int32 status; UInt32 curTime; numFrameBufs = 0; curTime = Utils_getCurTimeInMsec(); while (1) { pListElem = ListMP_getHead(pObj->listMPOutHndl); if (pListElem == NULL) break; IpcFramesInLink_getFrameBuf(pObj, pListElem, &pFrameBuf); UTILS_assert(SYSTEM_IPC_FRAMES_GET_BUFSTATE(pListElem->bufState) == IPC_FRAMEBUF_STATE_OUTQUE); pListElem->frameBuf.reserved[0] = curTime; SYSTEM_IPC_FRAMES_SET_BUFOWNERPROCID(pListElem->bufState); SYSTEM_IPC_FRAMES_SET_BUFSTATE(pListElem->bufState, IPC_FRAMEBUF_STATE_DEQUEUED); pObj->stats.recvCount++; status = Utils_quePut(&pObj->outFrameBufQue, pFrameBuf, BIOS_NO_WAIT); UTILS_assert(status == FVID2_SOK); numFrameBufs++; } #ifdef SYSTEM_DEBUG_IPC_RT Vps_printf(" %d: IPC_FRAMES_IN : Recevived %d framebufs !!!\n", Utils_getCurTimeInMsec(), numFrameBufs); #endif if (numFrameBufs && pObj->createArgs.baseCreateParams.notifyNextLink) { UTILS_assert(pObj->createArgs.baseCreateParams.numOutQue == 1); System_sendLinkCmd(pObj->createArgs.baseCreateParams.outQueParams[0]. nextLink, SYSTEM_CMD_NEW_DATA); } return IPC_FRAMES_IN_LINK_S_SUCCESS; }
Int32 DupLink_drvProcessFrames(DupLink_Obj * pObj) { UInt32 frameId, outId; FVID2_Frame *pFrame, *pOrgFrame; System_FrameInfo *pFrameInfo, *pOrgFrameInfo; Int32 status; DupLink_CreateParams *pCreateArgs; pCreateArgs = &pObj->createArgs; System_getLinksFullFrames(pCreateArgs->inQueParams.prevLinkId, pCreateArgs->inQueParams.prevLinkQueId, &pObj->inFrameList); if (pObj->inFrameList.numFrames) { pObj->getFrameCount += pObj->inFrameList.numFrames; for (outId = 0; outId < pCreateArgs->numOutQue; outId++) { pObj->outFrameList[outId].numFrames = 0; } for (frameId = 0; frameId < pObj->inFrameList.numFrames; frameId++) { pOrgFrame = pObj->inFrameList.frames[frameId]; if (pOrgFrame == NULL) continue; pOrgFrameInfo = (System_FrameInfo *) pOrgFrame->appData; UTILS_assert(pOrgFrameInfo != NULL); pOrgFrameInfo->dupCount = pCreateArgs->numOutQue; for (outId = 0; outId < pCreateArgs->numOutQue; outId++) { status = Utils_bufGetEmptyFrame(&pObj->outFrameQue[outId], &pFrame, BIOS_NO_WAIT); UTILS_assert(status == FVID2_SOK); UTILS_assert(pFrame != NULL); pFrameInfo = (System_FrameInfo *) pFrame->appData; UTILS_assert(pFrameInfo != NULL); memcpy(pFrame, pOrgFrame, sizeof(*pOrgFrame)); memcpy(pFrameInfo, pOrgFrameInfo, sizeof(*pOrgFrameInfo)); pFrame->appData = pFrameInfo; pFrameInfo->pDupOrgFrame = pOrgFrame; pObj->outFrameList[outId].frames[pObj->outFrameList[outId]. numFrames] = pFrame; pObj->outFrameList[outId].numFrames++; } } for (outId = 0; outId < pCreateArgs->numOutQue; outId++) { status = Utils_bufPutFull(&pObj->outFrameQue[outId], &pObj->outFrameList[outId]); UTILS_assert(status == FVID2_SOK); if (pCreateArgs->notifyNextLink) { System_sendLinkCmd(pCreateArgs->outQueParams[outId].nextLink, SYSTEM_CMD_NEW_DATA); } } } return FVID2_SOK; }