コード例 #1
0
ファイル: scdLink_alg.c プロジェクト: JammyWei/dm8168
Int32 AlgLink_scdAlgProcessFrames(Utils_TskHndl *pTsk, AlgLink_ScdObj * pObj, FVID2_FrameList *pFrameList)
{
    Int32 status = FVID2_SOK;
    UInt32 frameId;
    FVID2_Frame *pFrame;
    AlgLink_ScdChObj *pChObj;
    Bool skipFrame;

    if(pObj->processFrameCount==0)
    {
        AlgLink_scdAlgResetStatistics(pObj);
    }

    for(frameId=0; frameId<pFrameList->numFrames; frameId++)
    {
        pFrame = pFrameList->frames[frameId];

        if(pFrame==NULL)
            continue;

        if(!AlgLink_scdAlgIsValidCh(pObj, pFrame->channelNum))
        {
            continue;
        }

        pChObj = &pObj->chObj[pFrame->channelNum];

        pChObj->inFrameRecvCount++;

        AlgLink_scdAlgRtPrmUpdate(pObj, pChObj, pFrame);

        skipFrame = Utils_doSkipFrame(&pChObj->frameSkipContext);

        if(skipFrame)
        {
            pChObj->inFrameSkipCount++;
            continue;
        }

        if(pChObj->scdMode != ALG_LINK_SCD_DETECTMODE_MONITOR_FULL_FRAME)
        {
            /* SCD is disabled for this channel */
            pChObj->inFrameSkipCount++;

            /* reset the alg so that next it starts from initial condition */
            pChObj->algReset = TRUE;
            continue;
        }

        if(AlgLink_scdAlgSkipInitialFrames(pObj, pChObj))
            continue;

        AlgLink_scdAlgSubmitFrame(pObj, pChObj, pFrame);
    }

    return status;
}
コード例 #2
0
ファイル: scdLink_alg.c プロジェクト: Lichanglu/Edukit-MW
Int32 AlgLink_scdAlgProcessFrames(Utils_TskHndl *pTsk, AlgLink_ScdObj * pObj, FVID2_FrameList *pFrameList)
{
    Int32 status = FVID2_SOK;
    UInt32 frameId;
    FVID2_Frame *pFrame;
    AlgLink_ScdChObj *pChObj;
    Bool skipFrame;

    if(pObj->processFrameCount==0)
    {
        AlgLink_scdAlgResetStatistics(pObj);
    }

    for(frameId=0; frameId<pFrameList->numFrames; frameId++)
    {
        pFrame = pFrameList->frames[frameId];

        if(pFrame==NULL)
            continue;

        if(!AlgLink_scdAlgIsValidCh(pObj, pFrame->channelNum))
        {
            continue;
        }

        pChObj = &pObj->chObj[pFrame->channelNum];

        pChObj->inFrameRecvCount++;

        skipFrame = Utils_doSkipFrame(&pChObj->frameSkipContext);

        if(skipFrame)
        {
            pChObj->inFrameSkipCount++;
            continue;
        }

        pChObj->inFrameProcessCount++;
        pObj->processFrameCount++;

        #if 0
        AlgLink_scdAlgRtPrmUpdate(pObj, pChObj, pFrame);
        #endif

        if(AlgLink_scdAlgSkipInitialFrames(pObj, pChObj))
            continue;

        status = AlgLink_scdAlgDoTmpFrameInit(pObj, pChObj, pFrame);
        if(status!=FVID2_SOK)
            continue;

        AlgLink_scdAlgDoProcessFrame(pObj, pChObj, pFrame);
    }

    return status;
}
コード例 #3
0
ファイル: scdLink_alg.c プロジェクト: sdut10523/dvr_rdk
Int32 AlgLink_ScdalgProcessData(AlgLink_ScdObj * pObj, FVID2_FrameList *frameList, Utils_BitBufHndl *bufOutQue)
{
    UInt32 frameId, curTime;
    FVID2_Frame *pFrame;
    Int32 chIdx, status;
    Int32 frameFound;
    Bitstream_Buf *pOutBuf;
    Bitstream_BufList outBitBufList;
    System_FrameInfo *pInFrameInfo;

    outBitBufList.numBufs = 0;
    outBitBufList.appData = NULL;

    AlgLink_ScdChObj *pChObj;

    pObj->totalFrameCount += frameList->numFrames;

    status = FVID2_EFAIL;
    if (frameList->numFrames)
    {
        for(frameId=0; frameId< frameList->numFrames; frameId++)
        {
            Bool doFrameDrop;
        	pFrame = frameList->frames[frameId];
            //chIdx = pFrame->channelNum - pObj->createArgs.startChNoForSCD;
     
            frameFound = 0;
            for(chIdx = 0; chIdx < pObj->createArgs.numValidChForSCD; chIdx++)
            {
                if(pFrame->channelNum == pObj->createArgs.chDefaultParams[chIdx].chId)
                {
                  frameFound = 1;
                  break;
                }
            }
     
            if (frameFound == 0)
              continue;

            pChObj = &pObj->chObj[chIdx];

            pChObj->inFrameRecvCount++;
            doFrameDrop = Utils_doSkipFrame(&pChObj->frameSkipCtx);
            if(doFrameDrop == FALSE)
            {
                pOutBuf = NULL;
                status = Utils_bitbufGetEmptyBuf(bufOutQue,
                                                 &pOutBuf,
                                                 0, //pObj->outObj.ch2poolMap[chIdx], /*Need to change later.*/
                                                 BIOS_NO_WAIT);

                if(!((status == FVID2_SOK) && (pOutBuf)))
                {
                   doFrameDrop = TRUE;
                }
            }
            if(doFrameDrop == FALSE)
            {
                pObj->chParams[chIdx].curFrame = pFrame->addr[0][0];

                pInFrameInfo = (System_FrameInfo *) pFrame->appData;

                pOutBuf->lowerTimeStamp = (UInt32)(pInFrameInfo->ts64 & 0xFFFFFFFF);
                pOutBuf->upperTimeStamp = (UInt32)(pInFrameInfo->ts64 >> 32);
                pOutBuf->channelNum = pFrame->channelNum;
                pOutBuf->fillLength = sizeof(AlgLink_ScdResult);
                pOutBuf->frameWidth = pObj->chParams[chIdx].width;
                pOutBuf->frameHeight = pObj->chParams[chIdx].height;

                curTime = Utils_getCurTimeInMsec();
                
//                AlgLink_ScdalgProcess(pObj, pFrame->channelNum, (AlgLink_ScdResult *) pOutBuf->addr);
                AlgLink_ScdalgProcess(pObj, chIdx, (AlgLink_ScdResult *) pOutBuf->addr);
                pObj->chParams[chIdx].chBlkConfigUpdate = FALSE;

                pChObj->inFrameProcessTime += (Utils_getCurTimeInMsec() - curTime);

                pChObj->inFrameProcessCount++;
                outBitBufList.bufs[outBitBufList.numBufs] = pOutBuf;
                outBitBufList.numBufs++;

            }
            else
            {
                pChObj->inFrameUserSkipCount++;

            }
        }
コード例 #4
0
ファイル: ipcOutM3Link_tsk.c プロジェクト: sdut10523/dvr_rdk
Int32 IpcOutM3Link_processFrames(IpcOutM3Link_Obj * pObj)
{
    System_LinkInQueParams *pInQueParams;
    FVID2_FrameList frameList;
    FVID2_Frame *pFrame;
    SystemIpcM3_ListElem *pListElem;
    Int32 status;
    Int32 frameId;
    IpcOutM3Link_ChObj *pChObj;
	
    pInQueParams = &pObj->createArgs.inQueParams;

    System_getLinksFullFrames(pInQueParams->prevLinkId,
                              pInQueParams->prevLinkQueId, &frameList);

    pObj->freeFrameList.numFrames = 0;

    if (frameList.numFrames)
    {
#ifdef SYSTEM_DEBUG_IPC_RT
        Vps_printf(" %d: IPC_OUT_M3   : Received %d frames !!!\n",
                   Utils_getCurTimeInMsec(), frameList.numFrames);
#endif

        pObj->totalFrameCount += frameList.numFrames;
        for (frameId = 0; frameId < frameList.numFrames; frameId++)
        {
            Bool          doFrameDrop;
            pFrame = frameList.frames[frameId];
            pChObj = &pObj->chObj[pFrame->channelNum];
            pChObj->inFrameRecvCount++;
            doFrameDrop = Utils_doSkipFrame(&(pChObj->frameSkipCtx));
            
            /* frame skipped due to user setting */
            if(doFrameDrop)
            {
                pChObj->inFrameUserSkipCount++;
                pObj->freeFrameList.frames[pObj->freeFrameList.numFrames] =
                    pFrame;
                pObj->freeFrameList.numFrames++;
                UTILS_assert(pObj->freeFrameList.numFrames <=
                             FVID2_MAX_FVID_FRAME_PTR);
                continue;;
            }

            status =
                Utils_queGet(&pObj->listElemQue, (Ptr *) & pListElem, 1,
                             BIOS_NO_WAIT);
            if (status != FVID2_SOK)
            {
                /* normally this condition should not happen, if it happens
                 * return the frame back to its generator */
#if 0
                Vps_printf(" IPC_OUT: Dropping frame\n");
#endif

                pObj->freeFrameList.frames[pObj->freeFrameList.numFrames] =
                    pFrame;
                pObj->freeFrameList.numFrames++;
                UTILS_assert(pObj->freeFrameList.numFrames <=
                             FVID2_MAX_FVID_FRAME_PTR);
                pChObj->inFrameUserSkipCount++;
                continue;
            }

            pListElem->pFrame = pFrame;

            /* no need to do cache ops since this is inter-M3 list */
            status = ListMP_putTail(pObj->listMPOutHndl, &pListElem->listElem);
            UTILS_assert(status == ListMP_S_SUCCESS);
            pChObj->inFrameProcessCount++;
        }

        if (pObj->freeFrameList.numFrames)
        {
            System_putLinksEmptyFrames(pInQueParams->prevLinkId,
                                       pInQueParams->prevLinkQueId,
                                       &pObj->freeFrameList);
        }

        if (pObj->createArgs.notifyNextLink)
        {
            UTILS_assert(pObj->createArgs.numOutQue == 1);
            System_ipcSendNotify(pObj->createArgs.outQueParams[0].nextLink);
        }

        if (TRUE == pObj->createArgs.noNotifyMode)
        {
            if (FALSE == pObj->prd.clkStarted)
            {
                IpcOutM3Link_startPrdObj(pObj,
                                          IPC_M3OUT_LINK_DONE_PERIOD_MS, FALSE);
            }
        }
    }

    return FVID2_SOK;
}