Exemple #1
0
Int32 MpSclrLink_putEmptyFrames(Utils_TskHndl * pTsk, UInt16 queId,
                              FVID2_FrameList * pFrameList)
{
    Int32 status;
    UInt32 i, currIndex;
    FVID2_Frame *pFrame;
    FVID2_FrameList freeFrameList;
    MpSclrLink_Obj *pObj = (MpSclrLink_Obj *) pTsk->appData;

    status = FVID2_SOK;
    /* Check if the frame belong to MP SCLR, if not put back to previous link */
    currIndex = 0;
    for (i = 0; i < pFrameList->numFrames; i++)
    {
        pFrame = pFrameList->frames[i];
        if ((((System_FrameInfo *)pFrame->appData)->isMpFrame) == 0)
        {
            /* Frame belongs to previous link */
            freeFrameList.frames[currIndex] = pFrame;
            currIndex++;
        }
        else
        {
            /* This frame belongs to MP SCLR */
            debugMpSclrPrintFrame(pFrame, "Next Link Return Output Frame");
            status = Utils_bufPutEmptyFrame(&pObj->linkBufQ, pFrame);

        }
    }
    if (currIndex)
    {
        freeFrameList.numFrames = currIndex;
        status =
        System_putLinksEmptyFrames(pObj->createArgs.inQueParams.prevLinkId,
                                   pObj->createArgs.inQueParams.prevLinkQueId, 
                                   &freeFrameList);
    }

    return status;
}
Int32 NullSrcLink_drvCreate(NullSrcLink_Obj * pObj,
                            NullSrcLink_CreateParams * pPrm)
{
    Int32 status;
    UInt32 chId, frameId;
    Clock_Params clockParams;
    System_LinkChInfo *pChInfo;
    FVID2_Frame *pFrame;

#ifdef SYSTEM_DEBUG_SWMS
    Vps_printf(" %d: NULL_SRC: Create in progress !!!\n", Utils_getCurTimeInMsec());
#endif

    memcpy(&pObj->createArgs, pPrm, sizeof(pObj->createArgs));

    UTILS_assert(pPrm->inputInfo.numCh <= SYSTEM_MAX_CH_PER_OUT_QUE);

    status = Utils_bufCreate(&pObj->bufOutQue, FALSE, FALSE);
    UTILS_assert(status == FVID2_SOK);

    if (pPrm->timerPeriod == 0 || pPrm->timerPeriod > 200)
        pPrm->timerPeriod = 16;

    Clock_Params_init(&clockParams);
    clockParams.period = pPrm->timerPeriod;
    clockParams.arg = (UArg) pObj;

    pObj->timer = Clock_create(NullSrcLink_drvTimerCb,
                               pPrm->timerPeriod, &clockParams, NULL);
    UTILS_assert(pObj->timer != NULL);

    pObj->info.numQue = 1;
    pObj->info.queInfo[0].numCh = pPrm->inputInfo.numCh;

    pChInfo = &pPrm->inputInfo.chInfo[0];

    pObj->outFormat.channelNum = 0;
    pObj->outFormat.width = pChInfo->width;
    pObj->outFormat.height = pChInfo->height;
    pObj->outFormat.pitch[0] = pChInfo->pitch[0];
    pObj->outFormat.pitch[1] = pChInfo->pitch[1];
    pObj->outFormat.pitch[2] = pChInfo->pitch[2];
    pObj->outFormat.fieldMerged[0] = FALSE;
    pObj->outFormat.fieldMerged[1] = FALSE;
    pObj->outFormat.fieldMerged[2] = FALSE;
    pObj->outFormat.dataFormat = pChInfo->dataFormat;
    pObj->outFormat.scanFormat = pChInfo->scanFormat;
    pObj->outFormat.bpp = FVID2_BPP_BITS16;
    pObj->outFormat.reserved = NULL;

    status = Utils_memFrameAlloc(&pObj->outFormat, pObj->outFrames, 1);
    UTILS_assert(status == FVID2_SOK);

    NullSrcLink_fillDataPattern(&pObj->outFormat, pObj->outFrames, 1);

    #ifndef SYSTEM_USE_TILER
    if (pObj->createArgs.tilerEnable)
    {
        Vps_printf("NULLSRC:!!WARNING.FORCIBLY DISABLING TILER since tiler is disabled at build time");
        pObj->createArgs.tilerEnable = FALSE;
    }
    #endif

    for (chId = 0; chId < pPrm->inputInfo.numCh; chId++)
    {
        memcpy(&pObj->info.queInfo[0].chInfo[chId],
               &pPrm->inputInfo.chInfo[chId],
               sizeof(pPrm->inputInfo.chInfo[chId]));

        pObj->info.queInfo[0].chInfo[chId].memType = VPS_VPDMA_MT_NONTILEDMEM;
        if (pObj->createArgs.tilerEnable)
        {
            pObj->info.queInfo[0].chInfo[chId].memType = VPS_VPDMA_MT_TILEDMEM;
        }
        pObj->chNextFid[chId] = 0;
    }

    for (frameId = 0;
         frameId < pPrm->inputInfo.numCh * SYSTEM_LINK_FRAMES_PER_CH; frameId++)
    {
        pFrame = &pObj->outFrames[frameId];

        memcpy(pFrame, &pObj->outFrames[0], sizeof(*pFrame));

        pFrame->appData = &pObj->frameInfo[frameId];

        memset(&pObj->frameInfo[frameId], 0, sizeof(pObj->frameInfo[frameId]));

        status = Utils_bufPutEmptyFrame(&pObj->bufOutQue, pFrame);
        UTILS_assert(status == FVID2_SOK);
    }

#ifdef SYSTEM_DEBUG_SWMS
    Vps_printf(" %d: NULL_SRC: Create Done !!!\n", Utils_getCurTimeInMsec());
#endif

    return FVID2_SOK;
}
Exemple #3
0
Int32 DupLink_drvCreate(DupLink_Obj * pObj, DupLink_CreateParams * pPrm)
{
    UInt32 outId, frameId;
    Int32 status;
    FVID2_Frame *pFrame;
    System_FrameInfo *pFrameInfo;
    Semaphore_Params semParams;

    memcpy(&pObj->createArgs, pPrm, sizeof(pObj->createArgs));
    UTILS_assert(pObj->createArgs.numOutQue <= DUP_LINK_MAX_OUT_QUE);

    pObj->putFrameCount = 0;
    pObj->getFrameCount = 0;

    memset(pObj->frames, 0, sizeof(pObj->frames));
    memset(pObj->frameInfo, 0, sizeof(pObj->frameInfo));

    status = System_linkGetInfo(pPrm->inQueParams.prevLinkId, &pObj->inTskInfo);
    UTILS_assert(status == FVID2_SOK);
    UTILS_assert(pPrm->inQueParams.prevLinkQueId < pObj->inTskInfo.numQue);

    pObj->info.numQue = pObj->createArgs.numOutQue;

    memcpy(&pObj->info.queInfo[0],
           &pObj->inTskInfo.queInfo[pPrm->inQueParams.prevLinkQueId],
           sizeof(pObj->inTskInfo.queInfo[0]));

    for (outId = 1; outId < pObj->info.numQue; outId++)
    {
        memcpy(&pObj->info.queInfo[outId],
               &pObj->info.queInfo[0], sizeof(pObj->info.queInfo[0]));
    }

    Semaphore_Params_init(&semParams);
    semParams.mode = Semaphore_Mode_BINARY;

    pObj->lock = Semaphore_create(1u, &semParams, NULL);

    for (outId = 0; outId < DUP_LINK_MAX_OUT_QUE; outId++)
    {
        status = Utils_bufCreate(&pObj->outFrameQue[outId], FALSE, FALSE);
        UTILS_assert(status == FVID2_SOK);

        for (frameId = 0; frameId < DUP_LINK_MAX_FRAMES_PER_OUT_QUE; frameId++)
        {
            pFrame =
                &pObj->frames[DUP_LINK_MAX_FRAMES_PER_OUT_QUE * outId +
                              frameId];
            pFrameInfo =
                &pObj->frameInfo[DUP_LINK_MAX_FRAMES_PER_OUT_QUE * outId +
                                 frameId];

            pFrame->appData = pFrameInfo;

            status = Utils_bufPutEmptyFrame(&pObj->outFrameQue[outId], pFrame);
            UTILS_assert(status == FVID2_SOK);
        }
    }

#ifdef SYSTEM_DEBUG_DUP
    Vps_printf(" %d: DUP   : Create Done !!!\n", Utils_getCurTimeInMsec());
#endif

    return FVID2_SOK;
}