コード例 #1
0
ファイル: scdLink_alg.c プロジェクト: JammyWei/dm8168
Int32 AlgLink_scdAlgCreate(AlgLink_ScdObj * pObj)
{
	Int32 status;
    SCD_CreatePrm *pAlgCreatePrm;

    pAlgCreatePrm = &pObj->algCreatePrm;

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

    AlgLink_scdAlgResetStatistics(pObj);

    pObj->processFrameCount  = 0;
    pObj->totalTime  = 0;

    pAlgCreatePrm->maxWidth  = SystemUtils_align(pObj->scdCreateParams.maxStride, ALG_LINK_SIMCOP_SCD_WIDTH_ALIGN);
    pAlgCreatePrm->maxHeight = pObj->scdCreateParams.maxHeight;
    pAlgCreatePrm->maxPitch  = pAlgCreatePrm->maxWidth;
    
    Vps_printf(" %d: SCD: Opening algorithm ... !!!\n",
        Utils_getCurTimeInMsec()
        );

    status = SCD_open(&pObj->algObj, pAlgCreatePrm);

    UTILS_assert(status==FVID2_SOK);

    Vps_printf(" %d: SCD: Opening algorithm ... DONE !!!\n",
        Utils_getCurTimeInMsec()
        );

    AlgLink_scdAlgAllocMem(pObj);
    AlgLink_scdAlgChCreate(pObj);

    status = Utils_dmaCreateCh(&pObj->dmaCh, UTILS_DMA_DEFAULT_EVENT_Q, 1, TRUE);

    UTILS_assert(status==FVID2_SOK);

    status = Utils_queCreate(&pObj->processQ,
                             ALG_LINK_MAX_PROCESS_FRAMES*ALG_LINK_SIMCOP_SCD_MAX_CH,
                             pObj->processQMem,
                             UTILS_QUE_FLAG_BLOCK_QUE_GET
                            );
    UTILS_assert(status==FVID2_SOK);

    AlgLink_scdAlgProcessTskSendCmd(pObj, SYSTEM_CMD_START);

	return FVID2_SOK;
}
コード例 #2
0
ファイル: chains_swMs.c プロジェクト: sdut10523/dvr_rdk
Void Chains_swMsGenerateLayoutParams(UInt32 devId, UInt32 layoutId,
                                     SwMsLink_CreateParams *swMsCreateArgs)
{
    SwMsLink_LayoutPrm *layoutInfo;
    SwMsLink_LayoutWinInfo *winInfo;
    UInt32 outWidth, outHeight, row, col, winId, widthAlign, heightAlign;
    UInt32 SwMsOutputFps;

    Chains_swMsGetOutSize(swMsCreateArgs->maxOutRes, &outWidth, &outHeight);

    widthAlign = 8;
    heightAlign = 1;

    if(devId>1)
        devId = 0;

    layoutInfo = &swMsCreateArgs->layoutPrm;
    /* store the SwMs output fps locally */
    SwMsOutputFps = layoutInfo->outputFPS;
    /* init to known default */
    memset(layoutInfo, 0, sizeof(*layoutInfo));

    layoutInfo->onlyCh2WinMapChanged = FALSE;
    /* restore the value OR
       Modify with new value if required */
    layoutInfo->outputFPS = SwMsOutputFps;

    if(layoutId > CHAINS_MAX_LAYOUTS)
        layoutId = 0;

    if(layoutId == 0)
    {
        printf("Display %d: Layout: CHAINS_LAYOUT_2X2_PLUS_4CH\n", devId);

        layoutInfo->numWin = 8;

        for(row=0; row<2; row++)
        {
            for(col=0; col<2; col++)
            {
                winId = row*2+col;

                winInfo = &layoutInfo->winInfo[winId];

                winInfo->width  = SystemUtils_align((outWidth*2)/5, widthAlign);
                winInfo->height = SystemUtils_align(outHeight/2, heightAlign);
                winInfo->startX = winInfo->width*col;
                winInfo->startY = winInfo->height*row;
                winInfo->bypass = TRUE;
                winInfo->channelNum = devId*SYSTEM_SW_MS_MAX_WIN + winId;
            }
        }

        for(row=0; row<4; row++)
        {
            winId = 4 + row;

            winInfo = &layoutInfo->winInfo[winId];

            winInfo->width  = layoutInfo->winInfo[0].width/2;
            winInfo->height = layoutInfo->winInfo[0].height/2;
            winInfo->startX = layoutInfo->winInfo[0].width*2;
            winInfo->startY = winInfo->height*row;
            winInfo->bypass = TRUE;
            winInfo->channelNum = devId*SYSTEM_SW_MS_MAX_WIN + winId;
        }
    }

    if(layoutId == 1)
    {
        printf("Display %d: Layout: CHAINS_LAYOUT_2X2\n", devId);

        layoutInfo->numWin    = 4;

        for(row=0; row<2; row++)
        {
            for(col=0; col<2; col++)
            {
                winId = row*2+col;

                winInfo = &layoutInfo->winInfo[winId];

                winInfo->width  = SystemUtils_align(outWidth/2, widthAlign);
                winInfo->height = SystemUtils_align(outHeight/2, heightAlign);
                winInfo->startX = winInfo->width*col;
                winInfo->startY = winInfo->height*row;
                winInfo->bypass = TRUE;
                winInfo->channelNum = devId*SYSTEM_SW_MS_MAX_WIN + winId;
            }
        }
    }

    if(layoutId == 2)
    {
        printf("Display %d: Layout: CHAINS_LAYOUT_1x1\n", devId);

        layoutInfo->numWin    = 1;

        winId = 0;

        winInfo = &layoutInfo->winInfo[winId];

        winInfo->startX = 0;
        winInfo->startY = 0;
        winInfo->width  = outWidth;
        winInfo->height = outHeight;
        winInfo->bypass = TRUE;
        winInfo->channelNum = devId*SYSTEM_SW_MS_MAX_WIN + winId;
    }

    if(layoutId == 3)
    {
        printf("Display %d: Layout: CHAINS_LAYOUT_1x1_PLUS_2PIP\n", devId);

        layoutInfo->numWin = 3;

        winId = 0;

        winInfo = &layoutInfo->winInfo[winId];

        winInfo->startX = 0;
        winInfo->startY = 0;
        winInfo->width  = outWidth;
        winInfo->height = outHeight;
        winInfo->bypass = TRUE;
        winInfo->channelNum = devId*SYSTEM_SW_MS_MAX_WIN + winId;

        for(col=0; col<2; col++)
        {
            winId = 1 + col;

            winInfo = &layoutInfo->winInfo[winId];

            winInfo->width  = SystemUtils_align(outWidth/4, widthAlign);
            winInfo->height = SystemUtils_align(outHeight/4, heightAlign);

            if(col==0)
            {
                winInfo->startX = SystemUtils_align(outWidth/20, widthAlign);
            }
            else
            {
                winInfo->startX = SystemUtils_align(
                    outWidth - winInfo->width - outWidth/20,
                    widthAlign);
            }

            winInfo->startY = SystemUtils_align(
                            outHeight - winInfo->height - outHeight/20,
                            heightAlign
                            );
            winInfo->bypass = TRUE;
            winInfo->channelNum = devId*SYSTEM_SW_MS_MAX_WIN + winId;
        }
    }

    if(layoutId == 4)
    {
        printf("Display %d: Layout: CHAINS_LAYOUT_3X3\n", devId);

        layoutInfo->numWin    = 9;

        for(row=0; row<3; row++)
        {
            for(col=0; col<3; col++)
            {
                winId = row*3+col;

                winInfo = &layoutInfo->winInfo[winId];

                winInfo->width  = SystemUtils_align(outWidth/3, widthAlign);
                winInfo->height = SystemUtils_align(outHeight/3, heightAlign);
                winInfo->startX = winInfo->width*col;
                winInfo->startY = winInfo->height*row;
                winInfo->bypass = TRUE;
                winInfo->channelNum = devId*SYSTEM_SW_MS_MAX_WIN + winId;
            }
        }

    }

    if(layoutId == 5)
    {
        printf("Display %d: Layout: CHAINS_LAYOUT_4X4\n", devId);

        layoutInfo->numWin    = 16;

        for(row=0; row<4; row++)
        {
            for(col=0; col<4; col++)
            {
                winId = row*4+col;

                winInfo = &layoutInfo->winInfo[winId];

                winInfo->width  = SystemUtils_align(outWidth/4, widthAlign);
                winInfo->height = SystemUtils_align(outHeight/4, heightAlign);
                winInfo->startX = winInfo->width*col;
                winInfo->startY = winInfo->height*row;
                winInfo->bypass = TRUE;
                winInfo->channelNum = devId*SYSTEM_SW_MS_MAX_WIN + winId;
            }
        }
    }

    if(layoutId == 6)
    {
        printf("Display %d: Layout: CHAINS_LAYOUT_5CH_PLUS_1CH\n", devId);

        layoutInfo->numWin = 6;

        winId = 0;

        winInfo = &layoutInfo->winInfo[winId];

        winInfo->width  = SystemUtils_align((outWidth*2)/3, widthAlign);
        winInfo->height = SystemUtils_align((outHeight*2)/3, heightAlign);
        winInfo->startX = 0;
        winInfo->startY = 0;
        winInfo->bypass = TRUE;
        winInfo->channelNum = devId*SYSTEM_SW_MS_MAX_WIN + winId;

        for(row=0; row<2; row++)
        {
            winId = 1 + row;

            winInfo = &layoutInfo->winInfo[winId];

            winInfo->width  = SystemUtils_align(layoutInfo->winInfo[0].width/2, widthAlign);
            winInfo->height = SystemUtils_align(layoutInfo->winInfo[0].height/2, heightAlign);
            winInfo->startX = layoutInfo->winInfo[0].width;
            winInfo->startY = winInfo->height*row;
            winInfo->bypass = TRUE;
            winInfo->channelNum = devId*SYSTEM_SW_MS_MAX_WIN + winId;

        }

        for(col=0; col<3; col++)
        {
            winId = 3 + col;

            winInfo = &layoutInfo->winInfo[winId];

            winInfo->width  = SystemUtils_align(layoutInfo->winInfo[0].width/2, widthAlign);
            winInfo->height = SystemUtils_align(layoutInfo->winInfo[0].height/2, heightAlign);
            winInfo->startX = winInfo->width*col;
            winInfo->startY = layoutInfo->winInfo[0].height;
            winInfo->bypass = TRUE;
            winInfo->channelNum = devId*SYSTEM_SW_MS_MAX_WIN + winId;
        }

    }

    if(layoutId == 7)
    {
        printf("Display %d: Layout: CHAINS_LAYOUT_7CH_PLUS_1CH\n", devId);
        layoutInfo->numWin = 8;

        winId = 0;

        winInfo = &layoutInfo->winInfo[winId];

        winInfo->width  = SystemUtils_align((outWidth)/4, widthAlign)*3;
        winInfo->height = SystemUtils_align((outHeight)/4, heightAlign)*3;
        winInfo->startX = 0;
        winInfo->startY = 0;
        winInfo->bypass = TRUE;
        winInfo->channelNum = devId*SYSTEM_SW_MS_MAX_WIN + winId;

        for(row=0; row<3; row++)
        {
            winId = 1 + row;

            winInfo = &layoutInfo->winInfo[winId];

            winInfo->width  = SystemUtils_align(
                                outWidth - layoutInfo->winInfo[0].width,
                                widthAlign);
            winInfo->height = SystemUtils_align(
                                layoutInfo->winInfo[0].height / 3,
                                heightAlign);
            winInfo->startX = layoutInfo->winInfo[0].width;
            winInfo->startY = winInfo->height*row;
            winInfo->bypass = TRUE;
            winInfo->channelNum = devId*SYSTEM_SW_MS_MAX_WIN + winId;

        }

        for(col=0; col<4; col++)
        {
            winId = 4 + col;

            winInfo = &layoutInfo->winInfo[winId];

            winInfo->width  = SystemUtils_align(outWidth / 4, widthAlign);
            winInfo->height = SystemUtils_align(
                                outHeight - layoutInfo->winInfo[0].height,
                                heightAlign);
            winInfo->startX = winInfo->width*col;
            winInfo->startY = layoutInfo->winInfo[0].height;
            winInfo->bypass = TRUE;
            winInfo->channelNum = devId*SYSTEM_SW_MS_MAX_WIN + winId;
        }
    }
}
コード例 #3
0
ファイル: app_mp_control.c プロジェクト: Lichanglu/enc_2000
Void app_web_set_mp_layout(UInt32 layout, UInt32 win1, UInt32 win2)
{
	UInt32 devId = 0;
	Int32 ret = 0;
	SwMsLink_CreateParams *swMsCreateArgs =  &(gEnc2000.swmsLink[0].create_params);
	SwMsLink_LayoutPrm *layoutInfo;
	SwMsLink_LayoutWinInfo *winInfo, *winInfo2;
	UInt32 outWidth, outHeight, widthAlign, heightAlign;
	UInt32 outputfps;
	//	UInt32 old_layout = get_mp_layout();
	PRINTF("layout=%d\n", layout);

	getoutsize(swMsCreateArgs->maxOutRes, &outWidth, &outHeight);

	widthAlign = 8;
	heightAlign = 1;

	if(devId > 1) {
		devId = 0;
	}

	layoutInfo = &swMsCreateArgs->layoutPrm;
	outputfps = layoutInfo->outputFPS;

	memset(layoutInfo, 0, sizeof(*layoutInfo));
	layoutInfo->onlyCh2WinMapChanged = FALSE;
	layoutInfo->outputFPS = outputfps;

	layoutInfo->numWin = 2;
	PRINTF("win1=%d,win2=%d\n", win1, win2);


	if((win1 < SIGNAL_INPUT_1 || win1 > SIGNAL_INPUT_2)
	   || (win2 < SIGNAL_INPUT_1 || win2 > SIGNAL_INPUT_2)
	   || (win2 == win1)) {

		ERR_PRN("WARNING:win1 =%d|| win2=%d\n", win1, win2);
		return ;
	}

	switch(layout) {
		case MP_LAYOUT_1 : {
			PRINTF("---MP_LAYOUT_1---\n");
			winInfo = &layoutInfo->winInfo[0];
			winInfo->width	= SystemUtils_align(outWidth / 3, widthAlign);
			winInfo->height = SystemUtils_align(outHeight / 3, heightAlign);
			winInfo->startX = 0;
			winInfo->startY = 0;
			winInfo->bypass = FALSE;
			winInfo->channelNum = win1;

			winInfo2 = &layoutInfo->winInfo[1];
			winInfo2->width	= SystemUtils_align(outWidth * 2 / 3, widthAlign);
			winInfo2->height = SystemUtils_align(outHeight, heightAlign);
			winInfo2->startX = winInfo->width;
			winInfo2->startY = 0;
			winInfo2->bypass = FALSE;
			winInfo2->channelNum = win2;
			break;
		}

		case MP_LAYOUT_2 : {
			PRINTF("---MP_LAYOUT_2---\n");
			winInfo = &layoutInfo->winInfo[0];
			winInfo->width	= SystemUtils_align(outWidth / 2, widthAlign);
			winInfo->height = SystemUtils_align(outHeight, heightAlign);
			winInfo->startX = 0;
			winInfo->startY = 0;
			winInfo->bypass = FALSE;
			winInfo->channelNum = win1;

			winInfo2 = &layoutInfo->winInfo[1];
			winInfo2->width	= SystemUtils_align(outWidth / 2, widthAlign);
			winInfo2->height = SystemUtils_align(outHeight, heightAlign);
			winInfo2->startX = winInfo->width;
			winInfo2->startY = 0;
			winInfo2->bypass = FALSE;
			winInfo2->channelNum = win2;
			break;
		}

		case MP_LAYOUT_3: {
			PRINTF("---MP_LAYOUT_3---\n");
			winInfo = &layoutInfo->winInfo[1];
			winInfo->width	= SystemUtils_align(outWidth / 3, widthAlign);
			winInfo->height = SystemUtils_align(outHeight / 3, heightAlign);
			winInfo->startX = 0;
			winInfo->startY = 0;
			winInfo->bypass = FALSE;
			winInfo->channelNum = win1;

			winInfo2 = &layoutInfo->winInfo[0];
			winInfo2->width	= SystemUtils_align(outWidth, widthAlign);
			winInfo2->height = SystemUtils_align(outHeight, heightAlign);
			winInfo2->startX = 0;
			winInfo2->startY = 0;
			winInfo2->bypass = FALSE;
			winInfo2->channelNum = win2;

			break;
		}

		case MP_LAYOUT_4: {
			PRINTF("---MP_LAYOUT_4---\n");
			winInfo = &layoutInfo->winInfo[1];
			winInfo->width	= SystemUtils_align(outWidth / 3, widthAlign);
			winInfo->height = SystemUtils_align(outHeight / 3, heightAlign);
			winInfo->startX = 0;
			winInfo->startY = outHeight - winInfo->height;
			winInfo->bypass = FALSE;
			winInfo->channelNum = win1;

			winInfo2 = &layoutInfo->winInfo[0];
			winInfo2->width	= SystemUtils_align(outWidth, widthAlign);
			winInfo2->height = SystemUtils_align(outHeight, heightAlign);
			winInfo2->startX = 0;
			winInfo2->startY = 0;
			winInfo2->bypass = FALSE;
			winInfo2->channelNum = win2;
			break;
		}

		case MP_LAYOUT_5: {
			PRINTF("---MP_LAYOUT_5---\n");
			winInfo = &layoutInfo->winInfo[1];
			winInfo->width	= SystemUtils_align((outWidth) / 3, widthAlign);
			winInfo->height = SystemUtils_align(outHeight / 3, heightAlign);
			winInfo->startX = outWidth - winInfo->width;
			winInfo->startY = 0;
			winInfo->bypass = FALSE;
			winInfo->channelNum = win1;

			winInfo2 = &layoutInfo->winInfo[0];
			winInfo2->width	= SystemUtils_align((outWidth), widthAlign);
			winInfo2->height = SystemUtils_align(outHeight, heightAlign);
			winInfo2->startX = 0;
			winInfo2->startY = 0;
			winInfo2->bypass = FALSE;
			winInfo2->channelNum = win2;
			break;
		}

		case MP_LAYOUT_6: {
			PRINTF("---MP_LAYOUT_6---\n");

			winInfo = &layoutInfo->winInfo[1];
			winInfo->width	= SystemUtils_align((outWidth) / 3, widthAlign);
			winInfo->height = SystemUtils_align(outHeight / 3, heightAlign);
			winInfo->startX = outWidth - winInfo->width;
			winInfo->startY = outHeight - winInfo->height;
			winInfo->bypass = FALSE;
			winInfo->channelNum = win1;

			winInfo2 = &layoutInfo->winInfo[0];
			winInfo2->width	= SystemUtils_align((outWidth), widthAlign);
			winInfo2->height = SystemUtils_align(outHeight, heightAlign);
			winInfo2->startX = 0;
			winInfo2->startY = 0;
			winInfo2->bypass = FALSE;
			winInfo2->channelNum = win2;

			break;
		}

		default:
			PRINTF("---MP_LAYOUT_2---\n");
			winInfo = &layoutInfo->winInfo[0];
			winInfo->width	= SystemUtils_align(outWidth / 2, widthAlign);
			winInfo->height = SystemUtils_align(outHeight, heightAlign);
			winInfo->startX = 0;
			winInfo->startY = 0;
			winInfo->bypass = FALSE;
			winInfo->channelNum = win1;

			winInfo2 = &layoutInfo->winInfo[1];
			winInfo2->width	= SystemUtils_align(outWidth / 2, widthAlign);
			winInfo2->height = SystemUtils_align(outHeight, heightAlign);
			winInfo2->startX = winInfo->width;
			winInfo2->startY = 0;
			winInfo2->bypass = FALSE;
			winInfo2->channelNum = win2;
			break;
	}

	app_set_swap_layout(layout, win1, win2);

	ret = swms_set_layout(gEnc2000.swmsLink[0].link_id, layoutInfo);

	set_mp_layout(layout);

	PRINTF("ret=%d\n", ret);
}
コード例 #4
0
ファイル: multich_vcap_vdis.c プロジェクト: JammyWei/dm8168
Void MultiCh_createVcapVdis()
{
    CaptureLink_CreateParams    capturePrm;
    NsfLink_CreateParams        nsfPrm;
    DeiLink_CreateParams        deiPrm[2];
    NullSrcLink_CreateParams    nullSrcPrm;
    MergeLink_CreateParams      mergePrm;
    DupLink_CreateParams        dupPrm;
    static SwMsLink_CreateParams       swMsPrm[VDIS_DEV_MAX];
    DisplayLink_CreateParams    displayPrm[VDIS_DEV_MAX];

    CaptureLink_VipInstParams *pCaptureInstPrm;
    CaptureLink_OutParams     *pCaptureOutPrm;

    VCAP_VIDDEC_PARAMS_S vidDecVideoModeArgs[NUM_CAPTURE_DEVICES];

    UInt32 grpxId[VDIS_DEV_MAX];
    UInt32 nullId;
    UInt32 mergeId, dupId;
    UInt32 deiOutQue;

    UInt32 vipInstId;
    UInt32 i;
    UInt32 numSubChains;
    Bool enableSdtv;

    for (i = 0; i < VDIS_DEV_MAX; i++)
    {
        MULTICH_INIT_STRUCT(DisplayLink_CreateParams,displayPrm[i]);
        MULTICH_INIT_STRUCT(SwMsLink_CreateParams ,swMsPrm[i]);
    }

    MultiCh_detectBoard();

    System_linkControl(
        SYSTEM_LINK_ID_M3VPSS,
        SYSTEM_M3VPSS_CMD_RESET_VIDEO_DEVICES,
        NULL,
        0,
        TRUE
        );

    gVcapModuleContext.captureId    = SYSTEM_LINK_ID_CAPTURE;
    gVcapModuleContext.nsfId[0]     = SYSTEM_LINK_ID_NSF_0;
    gVcapModuleContext.deiId[0]     = SYSTEM_LINK_ID_DEI_HQ_0;
    gVcapModuleContext.deiId[1]     = SYSTEM_LINK_ID_DEI_0;
    gVcapModuleContext.nullSrcId    = SYSTEM_VPSS_LINK_ID_NULL_SRC_0;
    mergeId                         = SYSTEM_VPSS_LINK_ID_MERGE_0;
    dupId                           = SYSTEM_VPSS_LINK_ID_DUP_0;

    gVdisModuleContext.swMsId[0]      = SYSTEM_LINK_ID_SW_MS_MULTI_INST_0;
    gVdisModuleContext.swMsId[1]      = SYSTEM_LINK_ID_SW_MS_MULTI_INST_1;

    swMsPrm[0].numSwMsInst   = 1;
    swMsPrm[1].numSwMsInst   = 1;
    swMsPrm[0].swMsInstId[0] = SYSTEM_SW_MS_SC_INST_SC5;
    swMsPrm[1].swMsInstId[0] = SYSTEM_SW_MS_SC_INST_SC5;

    gVdisModuleContext.displayId[0] = SYSTEM_LINK_ID_DISPLAY_0; // ON CHIP HDMI
    gVdisModuleContext.displayId[1] = SYSTEM_LINK_ID_DISPLAY_1; // OFF CHIP HDMI
    gVdisModuleContext.displayId[2] = SYSTEM_LINK_ID_DISPLAY_2; // OFF CHIP HDMI
    grpxId[0]                       = SYSTEM_LINK_ID_GRPX_0;
    grpxId[1]                       = SYSTEM_LINK_ID_GRPX_1;
#if 0    /* Enabling graphics only for ON CHIP HDMI an OFF CHIP HDMI*/
    grpxId[2]                       = SYSTEM_LINK_ID_GRPX_2;
#endif
    nullId                          = SYSTEM_VPSS_LINK_ID_NULL_0;

    numSubChains             = 2;
    deiOutQue                = DEI_LINK_OUT_QUE_VIP_SC;
    enableSdtv               = FALSE;

    CaptureLink_CreateParams_Init(&capturePrm);

    capturePrm.numVipInst    = 2 * numSubChains;
    capturePrm.outQueParams[0].nextLink = gVcapModuleContext.nsfId[0];

    capturePrm.tilerEnable              = FALSE;
    capturePrm.enableSdCrop             = FALSE;

    for(vipInstId=0; vipInstId<capturePrm.numVipInst; vipInstId++)
    {
        pCaptureInstPrm                     = &capturePrm.vipInst[vipInstId];
        pCaptureInstPrm->vipInstId          = (SYSTEM_CAPTURE_INST_VIP0_PORTA+vipInstId)%SYSTEM_CAPTURE_INST_MAX;
        pCaptureInstPrm->videoDecoderId     = SYSTEM_DEVICE_VID_DEC_TVP5158_DRV;
        pCaptureInstPrm->inDataFormat       = SYSTEM_DF_YUV422P;
        pCaptureInstPrm->standard           = SYSTEM_STD_MUX_4CH_D1;
        pCaptureInstPrm->numOutput          = 1;

        pCaptureOutPrm                      = &pCaptureInstPrm->outParams[0];
        pCaptureOutPrm->dataFormat          = SYSTEM_DF_YUV422I_YUYV;
        pCaptureOutPrm->scEnable            = FALSE;
        pCaptureOutPrm->scOutWidth          = 0;
        pCaptureOutPrm->scOutHeight         = 0;
        pCaptureOutPrm->outQueId            = 0;
    }

    for(i = 0; i < NUM_CAPTURE_DEVICES; i++)
    {
        vidDecVideoModeArgs[i].videoIfMode        = DEVICE_CAPT_VIDEO_IF_MODE_8BIT;
        vidDecVideoModeArgs[i].videoDataFormat    = SYSTEM_DF_YUV422P;
        vidDecVideoModeArgs[i].standard           = SYSTEM_STD_MUX_4CH_D1;
        vidDecVideoModeArgs[i].videoCaptureMode   =
                    DEVICE_CAPT_VIDEO_CAPTURE_MODE_MULTI_CH_PIXEL_MUX_EMBEDDED_SYNC;
        vidDecVideoModeArgs[i].videoSystem        =
                                      DEVICE_VIDEO_DECODER_VIDEO_SYSTEM_AUTO_DETECT;
        vidDecVideoModeArgs[i].videoCropEnable    = FALSE;
        vidDecVideoModeArgs[i].videoAutoDetectTimeout = -1;
    }

    Vcap_configVideoDecoder(vidDecVideoModeArgs, NUM_CAPTURE_DEVICES);

    NsfLink_CreateParams_Init(&nsfPrm);
    nsfPrm.bypassNsf                 = FALSE;
    nsfPrm.tilerEnable               = FALSE;
    nsfPrm.inQueParams.prevLinkId    = gVcapModuleContext.captureId;
    nsfPrm.inQueParams.prevLinkQueId = 0;
    nsfPrm.numOutQue                 = numSubChains;
    nsfPrm.outQueParams[0].nextLink  = gVcapModuleContext.deiId[0];
    nsfPrm.outQueParams[1].nextLink  = gVcapModuleContext.deiId[1];

    nullSrcPrm.outQueParams.nextLink      = mergeId;
    nullSrcPrm.timerPeriod                = 33;
    nullSrcPrm.inputInfo.numCh            = 16;
    for(i=0; i<nullSrcPrm.inputInfo.numCh; i++)
    {
        System_LinkChInfo *pChInfo;

        pChInfo = &nullSrcPrm.inputInfo.chInfo[i];

        pChInfo->dataFormat = SYSTEM_DF_YUV420SP_UV;
        pChInfo->memType    = SYSTEM_MT_NONTILEDMEM;
        pChInfo->startX     = 48;
        pChInfo->startY     = 32;
        pChInfo->width      = 720;
        pChInfo->height     = 576;
        pChInfo->pitch[0]   = SystemUtils_align(pChInfo->width+pChInfo->startX, SYSTEM_BUFFER_ALIGNMENT);
        pChInfo->pitch[1]   = pChInfo->pitch[0];
        pChInfo->pitch[2]   = 0;
        pChInfo->scanFormat = SYSTEM_SF_PROGRESSIVE;
    }

    for(i=0; i<numSubChains; i++)
    {
        Int32 chId;

        DeiLink_CreateParams_Init(&deiPrm[i]);

        deiPrm[i].inQueParams.prevLinkId                        = gVcapModuleContext.nsfId[0];
        deiPrm[i].inQueParams.prevLinkQueId                     = i;
        deiPrm[i].outQueParams[deiOutQue].nextLink              = mergeId;
        deiPrm[i].outQueParams[deiOutQue^1].nextLink            = nullId;
        deiPrm[i].enableOut[deiOutQue]                          = TRUE;
        deiPrm[i].enableOut[deiOutQue^1]                        = FALSE;
        deiPrm[i].tilerEnable[DEI_LINK_OUT_QUE_VIP_SC]          = FALSE;

        deiPrm[i].comprEnable                                   = FALSE;
        deiPrm[i].setVipScYuv422Format                          = FALSE;

        /* DEI Path Scalar ratio is 1:2, D1 => CIF */
        deiPrm[i].outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][0].scaleMode = DEI_SCALE_MODE_RATIO;
        deiPrm[i].outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][0].ratio.widthRatio.numerator    = 1;
        deiPrm[i].outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][0].ratio.widthRatio.denominator  = 2;
        deiPrm[i].outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][0].ratio.heightRatio.numerator   = 1;
        deiPrm[i].outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][0].ratio.heightRatio.denominator         = 2;
        for (chId=1; chId < DEI_LINK_MAX_CH; chId++)
            deiPrm[i].outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][chId] = deiPrm[i].outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][0];

        /* VIP Scalar ratio is 1:1 */
        deiPrm[i].outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].scaleMode = DEI_SCALE_MODE_RATIO;
        deiPrm[i].outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].ratio.widthRatio.numerator    = 1;
        deiPrm[i].outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].ratio.widthRatio.denominator  = 1;
        deiPrm[i].outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].ratio.heightRatio.numerator   = 1;
        deiPrm[i].outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].ratio.heightRatio.denominator     = 1;
        for (chId=1; chId < DEI_LINK_MAX_CH; chId++)
            deiPrm[i].outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][chId] = deiPrm[i].outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0];

        mergePrm.numInQue                     = numSubChains;
        mergePrm.inQueParams[i].prevLinkId    = gVcapModuleContext.deiId[i];
        mergePrm.inQueParams[i].prevLinkQueId = deiOutQue;
        mergePrm.outQueParams.nextLink        = dupId;
        mergePrm.notifyNextLink               = TRUE;

        dupPrm.inQueParams.prevLinkId         = mergeId;
        dupPrm.inQueParams.prevLinkQueId      = 0;
        dupPrm.numOutQue                      = numSubChains;
        dupPrm.outQueParams[i].nextLink       = gVdisModuleContext.swMsId[i];
        dupPrm.notifyNextLink                 = TRUE;
    }

    mergePrm.numInQue                     = 3;
    mergePrm.inQueParams[i].prevLinkId    = gVcapModuleContext.nullSrcId;
    mergePrm.inQueParams[i].prevLinkQueId = 0;

    for(i=0; i<numSubChains; i++)
    {
        swMsPrm[i].inQueParams.prevLinkId    = dupId;
        swMsPrm[i].inQueParams.prevLinkQueId = i;
        swMsPrm[i].outQueParams.nextLink     = gVdisModuleContext.displayId[i];
        swMsPrm[i].maxInputQueLen            = SYSTEM_SW_MS_DEFAULT_INPUT_QUE_LEN;
        swMsPrm[i].maxOutRes                 = VSYS_STD_1080P_60;
        swMsPrm[i].initOutRes                = gVdisModuleContext.vdisConfig.deviceParams[i].resolution;
        swMsPrm[i].lineSkipMode = TRUE;

        swMsPrm[i].enableLayoutGridDraw = gVdisModuleContext.vdisConfig.enableLayoutGridDraw;

        MultiCh_swMsGetDefaultLayoutPrm(0, &swMsPrm[i], FALSE); /* Since only live preview is there, show it on both displays */

        displayPrm[i].inQueParams[0].prevLinkId    = gVdisModuleContext.swMsId[i];
        displayPrm[i].inQueParams[0].prevLinkQueId = 0;
        displayPrm[i].displayRes                = swMsPrm[i].initOutRes;
    }

    if(enableSdtv)
    {
        dupPrm.numOutQue                      = 3;
        dupPrm.outQueParams[2].nextLink       = gVdisModuleContext.displayId[2];
    }

    displayPrm[2].numInputQueues = 1;
    displayPrm[2].activeQueue    = 0;
    displayPrm[2].inQueParams[0].prevLinkId    = dupId;
    displayPrm[2].inQueParams[0].prevLinkQueId = 2;
    displayPrm[2].displayRes = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_SD].resolution;


#ifndef SYSTEM_USE_VIDEO_DECODER
    capturePrm.isPalMode = Vcap_isPalMode();
#endif

    System_linkCreate (gVcapModuleContext.captureId, &capturePrm, sizeof(capturePrm));
    System_linkCreate(gVcapModuleContext.nsfId[0] , &nsfPrm, sizeof(nsfPrm));

    for(i=0; i<numSubChains; i++)
        System_linkCreate(gVcapModuleContext.deiId[i]  , &deiPrm[i], sizeof(deiPrm[i]));

    System_linkCreate(gVcapModuleContext.nullSrcId , &nullSrcPrm, sizeof(nullSrcPrm));
    System_linkCreate(mergeId   , &mergePrm  , sizeof(mergePrm));
    System_linkCreate(dupId     , &dupPrm    , sizeof(dupPrm));

    for(i=0; i<numSubChains; i++)
        System_linkCreate(gVdisModuleContext.swMsId[i]  , &swMsPrm[i], sizeof(swMsPrm[i]));

    for(i=0; i<numSubChains; i++)
        System_linkCreate(gVdisModuleContext.displayId[i], &displayPrm[i], sizeof(displayPrm[i]));

    if(enableSdtv)
    {
        System_linkCreate(gVdisModuleContext.displayId[2], &displayPrm[2], sizeof(displayPrm[2]));
    }

    MultiCh_memPrintHeapStatus();

}
コード例 #5
0
ファイル: select.c プロジェクト: Lichanglu/web_ctrl_room
static Void swms_set_swms_layout2(UInt32 devId, SwMsLink_CreateParams *swMsCreateArgs, UInt32 num)
{
	SwMsLink_LayoutPrm *layoutInfo;
	SwMsLink_LayoutWinInfo *winInfo;
	UInt32 outWidth, outHeight, row, col, winId, widthAlign, heightAlign;
	UInt32 outputfps;

	getoutsize(swMsCreateArgs->maxOutRes, &outWidth, &outHeight);

	widthAlign = 8;
	heightAlign = 1;

	if(devId > 1) {
		devId = 0;
	}

	layoutInfo = &swMsCreateArgs->layoutPrm;
	outputfps = layoutInfo->outputFPS;

	memset(layoutInfo, 0, sizeof(*layoutInfo));
	layoutInfo->onlyCh2WinMapChanged = FALSE;
	layoutInfo->outputFPS = outputfps;

	layoutInfo->numWin = num;

	if(num == 1) {
		for(row = 0; row < 1; row++) {
			for(col = 0; col < 1; col++) {
				winId = row * 2 + col;
				winInfo = &layoutInfo->winInfo[winId];

				winInfo->width	= SystemUtils_align((outWidth * 2) / 4, widthAlign);
				winInfo->height = SystemUtils_align(outHeight / 2, heightAlign);
				winInfo->startX = winInfo->width * col;
				winInfo->startY = winInfo->height * row;

#if 1
				winInfo->width	= 1920;
				winInfo->height = 1080;
				winInfo->startX = 0;
				winInfo->startY = 0;
#endif

				winInfo->bypass = FALSE;
				winInfo->channelNum = devId * SYSTEM_SW_MS_MAX_WIN + winId;

			}
		}
	} else if(num == 2) {
		winInfo = &layoutInfo->winInfo[0];
		winInfo->width	= SystemUtils_align((outWidth), widthAlign);
		winInfo->height = SystemUtils_align(outHeight, heightAlign);
		winInfo->startX = 0;
		winInfo->startY = 0;
		winInfo->bypass = FALSE;
		winInfo->channelNum = 0;

		winInfo = &layoutInfo->winInfo[1];
		winInfo->width	= SystemUtils_align((outWidth) / 3, widthAlign);
		winInfo->height = SystemUtils_align(outHeight / 3, heightAlign);
		winInfo->startX = outWidth - winInfo->width;
		winInfo->startY = outHeight - winInfo->height;
		winInfo->bypass = FALSE;
		winInfo->channelNum = 1;
	}

}
コード例 #6
0
ファイル: select.c プロジェクト: Lichanglu/web_ctrl_room
static Void swms_set_swms_layout3(UInt32 devId, SwMsLink_CreateParams *swMsCreateArgs)
{
	SwMsLink_LayoutPrm *layoutInfo;
	SwMsLink_LayoutWinInfo *winInfo;
	UInt32 outWidth, outHeight, row, col, winId, widthAlign, heightAlign;
	UInt32 outputfps;

	getoutsize(swMsCreateArgs->maxOutRes, &outWidth, &outHeight);

	widthAlign = 8;
	heightAlign = 1;

	if(devId > 1) {
		devId = 0;
	}

	layoutInfo = &swMsCreateArgs->layoutPrm;
	outputfps = layoutInfo->outputFPS;

	memset(layoutInfo, 0, sizeof(*layoutInfo));
	layoutInfo->onlyCh2WinMapChanged = FALSE;
	layoutInfo->outputFPS = outputfps;

	layoutInfo->numWin = 3;

	for(row = 0; row < 2; row++) {
		for(col = 0; col < 2; col++) {
			winId = row * 2 + col;
			winInfo = &layoutInfo->winInfo[winId];

			winInfo->width	= SystemUtils_align((outWidth * 2) / 4, widthAlign);
			winInfo->height = SystemUtils_align(outHeight / 2, heightAlign);
			winInfo->startX = winInfo->width * col;
			winInfo->startY = winInfo->height * row;

			//		winInfo->width	= 1920;
			//		winInfo->height = 1080;
			//		winInfo->startX = 0;
			//		winInfo->startY = 0;

			winInfo->bypass = FALSE;
			winInfo->channelNum = devId * SYSTEM_SW_MS_MAX_WIN + winId;
		}
	}

#if 0

	for(row = 0; row < 4; row++) {
		winId = 4 + row;
		winInfo = &layoutInfo->winInfo[winId];

		winInfo->width	= layoutInfo->winInfo[0].width / 2;
		winInfo->height = layoutInfo->winInfo[0].height / 2;
		winInfo->startX = layoutInfo->winInfo[0].width * 2;
		winInfo->startY = winInfo->height * row;

		winInfo->bypass = TRUE;
		winInfo->channelNum = devId * SYSTEM_SW_MS_MAX_WIN + winId;
	}

#endif
}
コード例 #7
0
ファイル: select.c プロジェクト: Lichanglu/web_ctrl_room
static Void swms_set_swms_layout1(UInt32 devId, SwMsLink_CreateParams *swMsCreateArgs)
{
	SwMsLink_LayoutPrm *layoutInfo;
	SwMsLink_LayoutWinInfo *winInfo;
	UInt32 winId, widthAlign, heightAlign;
	UInt32 outputfps;

	widthAlign = 8;
	heightAlign = 1;

	if(devId > 1) {
		devId = 0;
	}

	layoutInfo = &swMsCreateArgs->layoutPrm;
	outputfps = layoutInfo->outputFPS;

	memset(layoutInfo, 0, sizeof(*layoutInfo));
	layoutInfo->onlyCh2WinMapChanged = FALSE;
	layoutInfo->outputFPS = outputfps;

	layoutInfo->numWin = 3;

	Int32 i = 0;

	for(i = 0; i < layoutInfo->numWin; i++) {
		UInt32 DstWidth, DstHeight, Srcwidth, Srcheight, x, y;
		Uint32 Outwidth, Outheight;
		SclrLink_CalSclrMode CalSclrMode = {0};
		winId = i;

		if(1 != GetSwmsTypeWH(swMsCreateArgs->maxOutRes, 32, i, &DstWidth, &DstHeight, &x, &y)) {
			return ;
		}

		capture_get_input_hw(i, &Srcwidth, &Srcheight);

		if((Srcwidth <= 0) || (Srcheight <= 0)) {
			Srcwidth  = 1920;
			Srcheight = 1080;

		}

		CalSclrMode.SrcWidth  = Srcwidth;
		CalSclrMode.SrcHeight = Srcheight;
		CalSclrMode.DstWidth  = DstWidth;
		CalSclrMode.DstHeight = DstHeight;
		Outwidth  = DstWidth;
		Outheight = DstHeight;
		CalculationSclrMode(CalSclrMode, &Outwidth, &Outheight);


		winInfo = &layoutInfo->winInfo[winId];
		winInfo->width  =  Outwidth;
		winInfo->height =  Outheight;
		winInfo->startX =  x + SystemUtils_align((CalSclrMode.DstWidth  - Outwidth) / 2, widthAlign);
		winInfo->startY =  y + SystemUtils_align((CalSclrMode.DstHeight - Outheight) / 2, heightAlign);
		winInfo->bypass = FALSE;


		winInfo->channelNum = winId;
	}

	gEduKit->layout.cur_layout   = 32;
}
コード例 #8
0
ファイル: scdLink_alg.c プロジェクト: JammyWei/dm8168
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;
}