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;
}
Exemple #2
0
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;
}
Exemple #5
0
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;
}