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; }
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; } } }
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); }
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(); }
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; } }
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 }
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; }
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; }