Пример #1
0
Int32 System_allocBlankFrame()
{
    UInt32 memSize;

    memSize = SYSTEM_BLANK_FRAME_WIDTH*SYSTEM_BLANK_FRAME_HEIGHT*SYSTEM_BLANK_FRAME_BYTES_PER_PIXEL;

    gSystem_objVpss.nonTiledBlankFrameAddr = Utils_memAlloc(memSize, VPS_BUFFER_ALIGNMENT*2);

    UTILS_assert(gSystem_objVpss.nonTiledBlankFrameAddr!=NULL);

    return 0;
}
Пример #2
0
Int32 AlgLink_scdAlgAllocMem(AlgLink_ScdObj * pObj)
{
    UInt32 blockId;
    Int32 status;

    status = SCD_getAllocInfo(&pObj->algObj, &pObj->algMemAllocPrm, &pObj->algPerChMemAllocPrm);
    UTILS_assert(status==FVID2_SOK);

    for(blockId=0; blockId<pObj->algMemAllocPrm.numMemBlocks; blockId++)
    {

        #ifdef SYSTEM_VERBOSE_PRINTS
        Vps_printf(" %d: SCD: MEM REQUEST %d: of size %d B (align=%d)\n",
            Utils_getCurTimeInMsec(),
            blockId,
            pObj->algMemAllocPrm.memBlockSize[blockId],
            pObj->algMemAllocPrm.memBlockAlign[blockId]
            );
        #endif

        pObj->algMemAllocPrm.memBlockAddr[blockId] =
                Utils_memAlloc(
                    pObj->algMemAllocPrm.memBlockSize[blockId],
                    pObj->algMemAllocPrm.memBlockAlign[blockId]
                );
        UTILS_assert(pObj->algMemAllocPrm.memBlockAddr[blockId]!=NULL);

        #ifdef SYSTEM_VERBOSE_PRINTS
        Vps_printf(" %d: SCD: MEM ALLOC %d: @ 0x%08x of size %d B (align=%d)\n",
            Utils_getCurTimeInMsec(),
            blockId,
            pObj->algMemAllocPrm.memBlockAddr[blockId],
            pObj->algMemAllocPrm.memBlockSize[blockId],
            pObj->algMemAllocPrm.memBlockAlign[blockId]
            );
        #endif
    }

    status = SCD_setAllocInfo(&pObj->algObj, &pObj->algMemAllocPrm);
    UTILS_assert(status==FVID2_SOK);

    return FVID2_SOK;
}
Пример #3
0
Int32 AlgLink_scdAlgChCreate(AlgLink_ScdObj * pObj)
{
    AlgLink_ScdChObj *pChObj;
    AlgLink_ScdCreateParams *pCreateArgs;
    AlgLink_ScdChParams *pChPrm;
    System_LinkChInfo *pChInfo;
    UInt32 blockId, chId, i;

    pCreateArgs = &pObj->scdCreateParams;

    for(chId=0; chId<ALG_LINK_SIMCOP_SCD_MAX_CH; chId++)
    {
        pChObj = &pObj->chObj[chId];

        memset(pChObj, 0, sizeof(*pChObj));

        pChObj->enableScd = FALSE;
    }

    for(i=0; i<pCreateArgs->numValidChForSCD; i++)
    {
        pChPrm = &pCreateArgs->chDefaultParams[i];

        chId =  pChPrm->chId;

        pChObj = &pObj->chObj[chId];

        pChInfo = &pObj->inQueInfo->chInfo[chId];

        pChObj->enableScd = TRUE;

        pChObj->skipInitialFrames = TRUE;
        pChObj->startTime         = 0;

        pChObj->isTiledMode = FALSE;

        if(pChInfo->memType==SYSTEM_MT_TILEDMEM)
            pChObj->isTiledMode = TRUE;

        pChObj->frameSkipContext.inputFrameRate = pCreateArgs->inputFrameRate;
        pChObj->frameSkipContext.outputFrameRate = pCreateArgs->outputFrameRate;
        pChObj->frameSkipContext.firstTime = TRUE;

        pChObj->chId = pChPrm->chId;

        pChObj->scdStatus     = ALG_LINK_SCD_DETECTOR_UNAVAILABLE;
        pChObj->prevScdStatus = ALG_LINK_SCD_DETECTOR_UNAVAILABLE;

        pChObj->algProcessPrm.chanId                = chId;
        /* need 32 pixel alignment for SCD */
        pChObj->algProcessPrm.width                 = SystemUtils_floor(pChInfo->width, 16);
        pChObj->algProcessPrm.height                = pChInfo->height;
        pChObj->algProcessPrm.pitch                 = pChInfo->pitch[0];
        pChObj->algProcessPrm.mode                  = SCD_DETECTMODE_MONITOR_FULL_FRAME;

        pChObj->algProcessPrm.frmSensitivity        = (SCD_Sensitivity)pChPrm->frmSensitivity;
        pChObj->algProcessPrm.frmIgnoreLightsON     = pChPrm->frmIgnoreLightsON;
        pChObj->algProcessPrm.frmIgnoreLightsOFF    = pChPrm->frmIgnoreLightsOFF;

        pChObj->algProcessPrm.fps                   = SCD_FPS_05;
        pChObj->algProcessPrm.pAlgImageBuf          = &pChObj->algTmpImageBufs;
        pChObj->algProcessPrm.inAddr                = NULL;
        pChObj->algProcessPrm.prevInAddr            = NULL;

        pChObj->algProcessPrm.numSecs2WaitAfterFrmAlert = pCreateArgs->numSecs2WaitAfterFrmAlert;

        pChObj->algInitMeanVarMHIPrm.chanId         = chId;
        pChObj->algInitMeanVarMHIPrm.width          = pChInfo->width;
        pChObj->algInitMeanVarMHIPrm.height         = pChInfo->height;
        pChObj->algInitMeanVarMHIPrm.pitch          = pChInfo->pitch[0];
        pChObj->algInitMeanVarMHIPrm.pAlgImageBuf   = &pChObj->algTmpImageBufs;
        pChObj->algInitMeanVarMHIPrm.inAddr         = NULL;

        for(blockId=0; blockId<pObj->algPerChMemAllocPrm.numMemBlocks; blockId++)
        {

            Vps_printf(" %d: SCD: CH%d: MEM REQUEST %d: of size %d B (align=%d)\n",
                Utils_getCurTimeInMsec(),
                chId,
                blockId,
                pObj->algPerChMemAllocPrm.memBlockSize[blockId],
                pObj->algPerChMemAllocPrm.memBlockAlign[blockId]
                );

            pChObj->memBlockAddr[blockId] =
                    Utils_memAlloc(
                        pObj->algPerChMemAllocPrm.memBlockSize[blockId],
                        pObj->algPerChMemAllocPrm.memBlockAlign[blockId]
                    );
            UTILS_assert(pChObj->memBlockAddr[blockId]!=NULL);

            Vps_printf(" %d: SCD: CH%d: MEM ALLOC %d: @ 0x%08x of size %d B (align=%d)\n",
                Utils_getCurTimeInMsec(),
                chId,
                blockId,
                pChObj->memBlockAddr[blockId],
                pObj->algPerChMemAllocPrm.memBlockSize[blockId],
                pObj->algPerChMemAllocPrm.memBlockAlign[blockId]
                );
        }

        pChObj->algTmpImageBufs.pBkgrdMeanSQ8_7     = pChObj->memBlockAddr[0];
        pChObj->algTmpImageBufs.pBkgrdVarianceSQ12_3= pChObj->memBlockAddr[1];
        pChObj->algTmpImageBufs.pMHIimageUQ8_0      = pChObj->memBlockAddr[2];
        pChObj->algTmpImageBufs.pUpdateMaskMHIUQ8_0 = pChObj->memBlockAddr[3];
    }

    return FVID2_SOK;
}
Пример #4
0
Int32 AlgLink_scdAlgChCreate(AlgLink_ScdObj * pObj)
{
    AlgLink_ScdChObj *pChObj;
    AlgLink_ScdCreateParams *pCreateArgs;
    AlgLink_ScdChParams *pChPrm;
    System_LinkChInfo *pChInfo;
    UInt32 blockId, chId, i;

    pCreateArgs = &pObj->scdCreateParams;

    for(chId=0; chId<ALG_LINK_SIMCOP_SCD_MAX_CH; chId++)
    {
        pChObj = &pObj->chObj[chId];

        memset(pChObj, 0, sizeof(*pChObj));

        pChObj->enableScd = FALSE;

        pChObj->scdMode = ALG_LINK_SCD_DETECTMODE_DISABLE;
    }

    for(i=0; i<pCreateArgs->numValidChForSCD; i++)
    {
        pChPrm = &pCreateArgs->chDefaultParams[i];

        chId =  pChPrm->chId;

        pChObj = &pObj->chObj[chId];

        pChInfo = &pObj->inQueInfo->chInfo[chId];

        pChObj->enableScd = TRUE;

        pChObj->scdMode = ALG_LINK_SCD_DETECTMODE_MONITOR_FULL_FRAME;

        pChObj->algReset = TRUE;

        pChObj->skipInitialFrames = TRUE;
        pChObj->startTime         = 0;

        pChObj->width   = SystemUtils_floor(pChInfo->width, ALG_LINK_SIMCOP_SCD_WIDTH_ALIGN);
        pChObj->height  = pChInfo->height;
        pChObj->rtPrmUpdate = FALSE;

        if(pChObj->width>pObj->algCreatePrm.maxWidth)
            pChObj->width = pObj->algCreatePrm.maxWidth;

        if(pChObj->height>pObj->algCreatePrm.maxHeight)
            pChObj->height = pObj->algCreatePrm.maxHeight;


        pChObj->frameSkipContext.inputFrameRate = pCreateArgs->inputFrameRate;
        pChObj->frameSkipContext.outputFrameRate = pCreateArgs->outputFrameRate;
        pChObj->frameSkipContext.firstTime = TRUE;

        pChObj->chId = pChPrm->chId;

        pChObj->scdStatus     = ALG_LINK_SCD_DETECTOR_UNAVAILABLE;
        pChObj->prevScdStatus = ALG_LINK_SCD_DETECTOR_UNAVAILABLE;

        pChObj->algProcessPrm.chanId                = chId;

        pChObj->algProcessPrm.width                 = pChObj->width;
        pChObj->algProcessPrm.height                = pChObj->height;
        pChObj->algProcessPrm.pitch                 = SystemUtils_align(pChInfo->width, ALG_LINK_SIMCOP_SCD_WIDTH_ALIGN);
        pChObj->algProcessPrm.mode                  = SCD_DETECTMODE_MONITOR_FULL_FRAME;
        pChObj->algProcessPrm.frmSensitivity        = (SCD_Sensitivity)pChPrm->frmSensitivity;
        pChObj->algProcessPrm.frmIgnoreLightsON     = pChPrm->frmIgnoreLightsON;
        pChObj->algProcessPrm.frmIgnoreLightsOFF    = pChPrm->frmIgnoreLightsOFF;

        pChObj->algProcessPrm.fps                   = SCD_FPS_05;
        pChObj->algProcessPrm.pAlgImageBuf          = &pChObj->algTmpImageBufs;
        pChObj->algProcessPrm.inAddr                = NULL;
        pChObj->algProcessPrm.prevInAddr            = NULL;

        pChObj->algProcessPrm.numSecs2WaitAfterFrmAlert = pCreateArgs->numSecs2WaitAfterFrmAlert;

        pChObj->algInitMeanVarMHIPrm.chanId         = chId;
        pChObj->algInitMeanVarMHIPrm.width          = pChObj->algProcessPrm.width;
        pChObj->algInitMeanVarMHIPrm.height         = pChObj->algProcessPrm.height;
        pChObj->algInitMeanVarMHIPrm.pitch          = pChObj->algProcessPrm.pitch;
        pChObj->algInitMeanVarMHIPrm.pAlgImageBuf   = &pChObj->algTmpImageBufs;
        pChObj->algInitMeanVarMHIPrm.inAddr         = NULL;

        for(blockId=0; blockId<pObj->algPerChMemAllocPrm.numMemBlocks; blockId++)
        {
            #ifdef SYSTEM_VERBOSE_PRINTS
            Vps_printf(" %d: SCD: CH%d: MEM REQUEST %d: of size %d B (align=%d)\n",
                Utils_getCurTimeInMsec(),
                chId,
                blockId,
                pObj->algPerChMemAllocPrm.memBlockSize[blockId],
                pObj->algPerChMemAllocPrm.memBlockAlign[blockId]
                );
            #endif

            pChObj->memBlockAddr[blockId] =
                    Utils_memAlloc(
                        pObj->algPerChMemAllocPrm.memBlockSize[blockId],
                        pObj->algPerChMemAllocPrm.memBlockAlign[blockId]
                    );
            UTILS_assert(pChObj->memBlockAddr[blockId]!=NULL);

            #ifdef SYSTEM_VERBOSE_PRINTS
            Vps_printf(" %d: SCD: CH%d: MEM ALLOC %d: @ 0x%08x of size %d B (align=%d)\n",
                Utils_getCurTimeInMsec(),
                chId,
                blockId,
                pChObj->memBlockAddr[blockId],
                pObj->algPerChMemAllocPrm.memBlockSize[blockId],
                pObj->algPerChMemAllocPrm.memBlockAlign[blockId]
                );
            #endif
        }

        pChObj->algTmpImageBufs.pBkgrdMeanSQ8_7     = pChObj->memBlockAddr[0];
        pChObj->algTmpImageBufs.pBkgrdVarianceSQ12_3= pChObj->memBlockAddr[1];
        pChObj->algTmpImageBufs.pMHIimageUQ8_0      = pChObj->memBlockAddr[2];

        {
            FVID2_Frame *pFrame;
            UInt32 frameId;
            Int32 status;

            pChObj->pPrevProcessFrame = NULL;

            status = Utils_queCreate(&pChObj->freeQ,
                                     ALG_LINK_MAX_PROCESS_FRAMES,
                                     pChObj->freeQMem,
                                     UTILS_QUE_FLAG_NO_BLOCK_QUE
                                        );

            UTILS_assert(status==FVID2_SOK);

            pChObj->processFrameSize = pChObj->algProcessPrm.pitch*pChObj->algProcessPrm.height;

            /* alloc channel process buffer memory */

            for(frameId=0; frameId<ALG_LINK_MAX_PROCESS_FRAMES; frameId++)
            {
                pFrame = &pChObj->processFrames[frameId];

                pFrame->addr[0][0] =
                        Utils_memAlloc(
                            pChObj->processFrameSize,
                            VPS_BUFFER_ALIGNMENT
                        );

                UTILS_assert(pFrame->addr[0][0]!=NULL);

                status = Utils_quePut(&pChObj->freeQ, pFrame, BIOS_NO_WAIT);

                UTILS_assert(status==FVID2_SOK);
            }
        }
    }

    return FVID2_SOK;
}
Пример #5
0
Int32 Utils_memFrameAlloc(FVID2_Format * pFormat,
                          FVID2_Frame * pFrame, UInt16 numFrames)
{
    UInt32 size, cOffset, frameId;
    Int32 status;
    UInt8 *pBaseAddr;

    /* init FVID2_Frame to 0's */
    memset(pFrame, 0, sizeof(*pFrame));

    /* align height to multiple of 2 */
    pFormat->height = VpsUtils_align(pFormat->height, 2);

    /* get frame size for given pFormat */
    status = Utils_memFrameGetSize(pFormat, &size, &cOffset);

    if (status == 0)
    {
        /* allocate the memory for 'numFrames' */

        /* for all 'numFrames' memory is contigously allocated */
        pBaseAddr = Utils_memAlloc(size * numFrames, VPS_BUFFER_ALIGNMENT);

        if (pBaseAddr == NULL)
        {
            status = -1;                                   /* Error in
                                                            * allocation,
                                                            * exit with error
                                                            */
        }
    }

    if (status == 0)
    {
        /* init memory pointer for 'numFrames' */
        for (frameId = 0; frameId < numFrames; frameId++)
        {

            /* copy channelNum to FVID2_Frame from FVID2_Format */
            pFrame->channelNum = pFormat->channelNum;
            pFrame->addr[0][0] = pBaseAddr;

            switch (pFormat->dataFormat)
            {
                case FVID2_DF_RAW_VBI:
                case FVID2_DF_YUV422I_UYVY:
                case FVID2_DF_YUV422I_VYUY:
                case FVID2_DF_YUV422I_YUYV:
                case FVID2_DF_YUV422I_YVYU:
                case FVID2_DF_YUV444I:
                case FVID2_DF_RGB24_888:
                    break;
                case FVID2_DF_YUV422SP_UV:
                case FVID2_DF_YUV420SP_UV:
                    /* assign pointer for C plane */
                    pFrame->addr[0][1] = (UInt8 *) pFrame->addr[0][0] + cOffset;
                    break;
                default:
                    /* illegal data format */
                    status = -1;
                    break;
            }
            /* go to next frame */
            pFrame++;

            /* increment base address */
            pBaseAddr += size;
        }
    }

    if (status != 0)
        Vps_printf("Memory allocation failed due to insufficient free memory \n");
    /* commented out, so please always check the status immediately after the 
     * Utils_memFrameAlloc() call and handle accordingly */
    // UTILS_assert(status == 0);

    return status;
}