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(); }
Void MultiCh_createVdecVdis() { IpcBitsOutLinkHLOS_CreateParams ipcBitsOutHostPrm; IpcBitsInLinkRTOS_CreateParams ipcBitsInVideoPrm; DecLink_CreateParams decPrm; IpcLink_CreateParams ipcOutVideoPrm; IpcLink_CreateParams ipcInVpssPrm; DupLink_CreateParams dupPrm; static SwMsLink_CreateParams swMsPrm[VDIS_DEV_MAX]; DisplayLink_CreateParams displayPrm[VDIS_DEV_MAX]; IpcFramesOutLinkHLOS_CreateParams ipcFramesOutHostPrm; IpcFramesInLinkRTOS_CreateParams ipcFramesInVpssFromHostPrm; MergeLink_CreateParams mergePrm; UInt32 i; UInt32 enableGrpx; Bool tilerEnable; Bool enableVideoFrameExport; System_init(); #if AVSYNC_COMP_ENABLE if (gVsysModuleContext.vsysConfig.enableAVsync == TRUE) { printf("AVSYNC_Init start\n"); AVSYNC_Init(); // avsync init for linux / A8 side printf("AVSYNC_Init done\n"); } #endif MULTICH_INIT_STRUCT(IpcLink_CreateParams,ipcInVpssPrm); MULTICH_INIT_STRUCT(IpcLink_CreateParams,ipcOutVideoPrm); MULTICH_INIT_STRUCT(IpcBitsOutLinkHLOS_CreateParams,ipcBitsOutHostPrm); MULTICH_INIT_STRUCT(IpcBitsInLinkRTOS_CreateParams,ipcBitsInVideoPrm); MULTICH_INIT_STRUCT(DecLink_CreateParams, decPrm); MULTICH_INIT_STRUCT(IpcFramesOutLinkHLOS_CreateParams ,ipcFramesOutHostPrm); MULTICH_INIT_STRUCT(IpcFramesInLinkRTOS_CreateParams ,ipcFramesInVpssFromHostPrm); 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 ); System_linkControl( SYSTEM_LINK_ID_M3VIDEO, SYSTEM_COMMON_CMD_SET_CH2IVAHD_MAP_TBL, &systemVid_encDecIvaChMapTbl, sizeof(SystemVideo_Ivahd2ChMap_Tbl), TRUE ); #ifdef TI_814X_BUILD tilerEnable = FALSE; enableGrpx = FALSE; #else tilerEnable = FALSE; enableGrpx = TRUE; #endif #if (tilerEnable == FALSE) { /* Disable tiler allocator for this usecase * for that tiler memory can be reused for * non-tiled allocation */ SystemTiler_disableAllocator(); } #endif enableVideoFrameExport = FALSE; gVdecModuleContext.ipcBitsOutHLOSId = SYSTEM_HOST_LINK_ID_IPC_BITS_OUT_0; gVdecModuleContext.ipcBitsInRTOSId = SYSTEM_VIDEO_LINK_ID_IPC_BITS_IN_0; gVdecModuleContext.decId = SYSTEM_LINK_ID_VDEC_0; gMultiCh_VdecVdisObj.ipcOutVideoId = SYSTEM_VIDEO_LINK_ID_IPC_OUT_M3_0; gMultiCh_VdecVdisObj.ipcInVpssId = SYSTEM_VPSS_LINK_ID_IPC_IN_M3_0; gMultiCh_VdecVdisObj.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; gVdisModuleContext.displayId[0] = SYSTEM_LINK_ID_DISPLAY_0; // ON AND OFF CHIP HDMI #ifdef TI_814X_BUILD gVdisModuleContext.displayId[1] = SYSTEM_LINK_ID_DISPLAY_2; // SDTV #else gVdisModuleContext.displayId[1] = SYSTEM_LINK_ID_DISPLAY_1; // OFF CHIP HDMI #endif if (enableVideoFrameExport) { gMultiCh_VdecVdisObj.mergeId = SYSTEM_VPSS_LINK_ID_MERGE_0; gVdisModuleContext.ipcFramesOutHostId = SYSTEM_HOST_LINK_ID_IPC_FRAMES_OUT_0; gVdisModuleContext.ipcFramesInVpssFromHostId = SYSTEM_VPSS_LINK_ID_IPC_FRAMES_IN_0; } if(enableGrpx) { // GRPX is enabled in Vdis_start() based on the link ID set here gVdisModuleContext.grpxId[0] = SYSTEM_LINK_ID_GRPX_0; #ifdef TI_814X_BUILD gVdisModuleContext.grpxId[1] = SYSTEM_LINK_ID_INVALID; #else gVdisModuleContext.grpxId[1] = SYSTEM_LINK_ID_GRPX_1; #endif } MultiCh_displayCtrlInit(&gVdisModuleContext.vdisConfig); ipcBitsOutHostPrm.baseCreateParams.outQueParams[0].nextLink= gVdecModuleContext.ipcBitsInRTOSId; ipcBitsOutHostPrm.baseCreateParams.notifyNextLink = FALSE; ipcBitsOutHostPrm.baseCreateParams.notifyPrevLink = FALSE; ipcBitsOutHostPrm.baseCreateParams.noNotifyMode = TRUE; ipcBitsOutHostPrm.baseCreateParams.numOutQue = 1; ipcBitsOutHostPrm.inQueInfo.numCh = gVdecModuleContext.vdecConfig.numChn; for (i=0; i<ipcBitsOutHostPrm.inQueInfo.numCh; i++) { ipcBitsOutHostPrm.inQueInfo.chInfo[i].width = gVdecModuleContext.vdecConfig.decChannelParams[i].maxVideoWidth; ipcBitsOutHostPrm.inQueInfo.chInfo[i].height = gVdecModuleContext.vdecConfig.decChannelParams[i].maxVideoHeight; ipcBitsOutHostPrm.inQueInfo.chInfo[i].scanFormat = SYSTEM_SF_PROGRESSIVE; ipcBitsOutHostPrm.inQueInfo.chInfo[i].bufType = 0; // NOT USED ipcBitsOutHostPrm.inQueInfo.chInfo[i].codingformat = 0; // NOT USED ipcBitsOutHostPrm.inQueInfo.chInfo[i].dataFormat = 0; // NOT USED ipcBitsOutHostPrm.inQueInfo.chInfo[i].memType = 0; // NOT USED ipcBitsOutHostPrm.inQueInfo.chInfo[i].startX = 0; // NOT USED ipcBitsOutHostPrm.inQueInfo.chInfo[i].startY = 0; // NOT USED ipcBitsOutHostPrm.inQueInfo.chInfo[i].pitch[0] = 0; // NOT USED ipcBitsOutHostPrm.inQueInfo.chInfo[i].pitch[1] = 0; // NOT USED ipcBitsOutHostPrm.inQueInfo.chInfo[i].pitch[2] = 0; // NOT USED } ipcBitsInVideoPrm.baseCreateParams.inQueParams.prevLinkId = gVdecModuleContext.ipcBitsOutHLOSId; ipcBitsInVideoPrm.baseCreateParams.inQueParams.prevLinkQueId = 0; ipcBitsInVideoPrm.baseCreateParams.outQueParams[0].nextLink = gVdecModuleContext.decId; ipcBitsInVideoPrm.baseCreateParams.noNotifyMode = TRUE; ipcBitsInVideoPrm.baseCreateParams.notifyNextLink = TRUE; ipcBitsInVideoPrm.baseCreateParams.notifyPrevLink = FALSE; ipcBitsInVideoPrm.baseCreateParams.numOutQue = 1; decPrm.numBufPerPool[0] = MAX_DEC_OUT_FRAMES_PER_CH; for (i=0; i<ipcBitsOutHostPrm.inQueInfo.numCh; i++) { if(gVdecModuleContext.vdecConfig.decChannelParams[i].isCodec == VDEC_CHN_H264) decPrm.chCreateParams[i].format = IVIDEO_H264HP; else if(gVdecModuleContext.vdecConfig.decChannelParams[i].isCodec == VDEC_CHN_MPEG4) decPrm.chCreateParams[i].format = IVIDEO_MPEG4ASP; else if(gVdecModuleContext.vdecConfig.decChannelParams[i].isCodec == VDEC_CHN_MJPEG) decPrm.chCreateParams[i].format = IVIDEO_MJPEG; decPrm.chCreateParams[i].numBufPerCh = gVdecModuleContext.vdecConfig.decChannelParams[i].numBufPerCh; decPrm.chCreateParams[i].profile = IH264VDEC_PROFILE_ANY; decPrm.chCreateParams[i].displayDelay = gVdecModuleContext.vdecConfig.decChannelParams[i].displayDelay; decPrm.chCreateParams[i].dpbBufSizeInFrames = IH264VDEC_DPB_NUMFRAMES_AUTO; decPrm.chCreateParams[i].fieldMergeDecodeEnable = FALSE; decPrm.chCreateParams[i].targetMaxWidth = ipcBitsOutHostPrm.inQueInfo.chInfo[i].width; decPrm.chCreateParams[i].targetMaxHeight = ipcBitsOutHostPrm.inQueInfo.chInfo[i].height; decPrm.chCreateParams[i].defaultDynamicParams.targetFrameRate = gVdecModuleContext.vdecConfig.decChannelParams[i].dynamicParam.frameRate; decPrm.chCreateParams[i].defaultDynamicParams.targetBitRate = gVdecModuleContext.vdecConfig.decChannelParams[i].dynamicParam.targetBitRate; } decPrm.inQueParams.prevLinkId = gVdecModuleContext.ipcBitsInRTOSId; decPrm.inQueParams.prevLinkQueId = 0; decPrm.outQueParams.nextLink = gMultiCh_VdecVdisObj.ipcOutVideoId; decPrm.tilerEnable = tilerEnable; ipcOutVideoPrm.inQueParams.prevLinkId = gVdecModuleContext.decId; ipcOutVideoPrm.inQueParams.prevLinkQueId = 0; ipcOutVideoPrm.outQueParams[0].nextLink = gMultiCh_VdecVdisObj.ipcInVpssId; ipcOutVideoPrm.notifyNextLink = TRUE; ipcOutVideoPrm.notifyPrevLink = TRUE; ipcOutVideoPrm.numOutQue = 1; ipcInVpssPrm.inQueParams.prevLinkId = gMultiCh_VdecVdisObj.ipcOutVideoId; ipcInVpssPrm.inQueParams.prevLinkQueId = 0; ipcInVpssPrm.notifyNextLink = TRUE; ipcInVpssPrm.notifyPrevLink = TRUE; ipcInVpssPrm.numOutQue = 1; if (enableVideoFrameExport) { ipcFramesOutHostPrm.baseCreateParams.noNotifyMode = TRUE; ipcFramesOutHostPrm.baseCreateParams.notifyNextLink = FALSE; ipcFramesOutHostPrm.baseCreateParams.notifyPrevLink = FALSE; ipcFramesOutHostPrm.baseCreateParams.inQueParams.prevLinkId = SYSTEM_LINK_ID_INVALID; ipcFramesOutHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0; ipcFramesOutHostPrm.baseCreateParams.numOutQue = 1; ipcFramesOutHostPrm.baseCreateParams.outQueParams[0].nextLink = gVdisModuleContext.ipcFramesInVpssFromHostId; MultiCh_setIpcFramesOutInQueInfo(&ipcFramesOutHostPrm.inQueInfo); ipcFramesInVpssFromHostPrm.baseCreateParams.noNotifyMode = TRUE; ipcFramesInVpssFromHostPrm.baseCreateParams.notifyNextLink = TRUE; ipcFramesInVpssFromHostPrm.baseCreateParams.notifyPrevLink = FALSE; ipcFramesInVpssFromHostPrm.baseCreateParams.inQueParams.prevLinkId = gVdisModuleContext.ipcFramesOutHostId; ipcFramesInVpssFromHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0; ipcFramesInVpssFromHostPrm.baseCreateParams.numOutQue = 1; ipcFramesInVpssFromHostPrm.baseCreateParams.outQueParams[0].nextLink = gMultiCh_VdecVdisObj.mergeId; ipcInVpssPrm.outQueParams[0].nextLink = gMultiCh_VdecVdisObj.mergeId; mergePrm.numInQue = 2; mergePrm.inQueParams[0].prevLinkId = gMultiCh_VdecVdisObj.ipcInVpssId; mergePrm.inQueParams[0].prevLinkQueId = 0; mergePrm.inQueParams[1].prevLinkId = gVdisModuleContext.ipcFramesInVpssFromHostId; mergePrm.inQueParams[1].prevLinkQueId = 0; mergePrm.outQueParams.nextLink = gMultiCh_VdecVdisObj.dupId; mergePrm.notifyNextLink = TRUE; dupPrm.inQueParams.prevLinkId = gMultiCh_VdecVdisObj.mergeId; } else { dupPrm.inQueParams.prevLinkId = gMultiCh_VdecVdisObj.ipcInVpssId; ipcInVpssPrm.outQueParams[0].nextLink = gMultiCh_VdecVdisObj.dupId; } dupPrm.inQueParams.prevLinkQueId = 0; dupPrm.numOutQue = gVsysModuleContext.vsysConfig.numDisplays; dupPrm.outQueParams[0].nextLink = gVdisModuleContext.swMsId[0]; dupPrm.outQueParams[1].nextLink = gVdisModuleContext.swMsId[1]; dupPrm.notifyNextLink = TRUE; #ifdef TI_814X_BUILD swMsPrm[0].numSwMsInst = 2; swMsPrm[0].swMsInstId[0] = SYSTEM_SW_MS_SC_INST_VIP1_SC; swMsPrm[0].swMsInstId[1] = SYSTEM_SW_MS_SC_INST_SC5; swMsPrm[0].swMsInstStartWin[0] = 0; swMsPrm[0].swMsInstStartWin[1] = 10; #else swMsPrm[0].swMsInstId[0] = SYSTEM_SW_MS_SC_INST_VIP1_SC; swMsPrm[0].swMsInstId[1] = SYSTEM_SW_MS_SC_INST_DEI_SC_NO_DEI; swMsPrm[1].swMsInstId[0] = SYSTEM_SW_MS_SC_INST_SC5; swMsPrm[1].swMsInstId[1] = SYSTEM_SW_MS_SC_INST_DEIHQ_SC_NO_DEI; swMsPrm[0].numSwMsInst = 2; swMsPrm[0].swMsInstStartWin[0] = 0; swMsPrm[0].swMsInstStartWin[1] = 16; swMsPrm[1].numSwMsInst = swMsPrm[0].numSwMsInst; swMsPrm[1].swMsInstStartWin[0] = swMsPrm[0].swMsInstStartWin[0]; swMsPrm[1].swMsInstStartWin[1] = swMsPrm[0].swMsInstStartWin[1]; #endif for(i=0; i<gVsysModuleContext.vsysConfig.numDisplays; i++) { swMsPrm[i].inQueParams.prevLinkId = gMultiCh_VdecVdisObj.dupId; swMsPrm[i].inQueParams.prevLinkQueId = i; swMsPrm[i].outQueParams.nextLink = gVdisModuleContext.displayId[i]; /* Disable inQue drop at SwMs as input may arrive very fast in VDEC->VDIS use case */ swMsPrm[i].maxInputQueLen = SYSTEM_SW_MS_INVALID_INPUT_QUE_LEN; if (i == 0) swMsPrm[i].maxOutRes = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_HDMI].resolution; else if (i == 1) #ifdef TI_814X_BUILD swMsPrm[i].maxOutRes = VSYS_STD_PAL; #else swMsPrm[i].maxOutRes = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_DVO2].resolution; #endif /* low cost line skip mode of scaling can be used, when tiler is off */ if(tilerEnable) swMsPrm[i].lineSkipMode = FALSE; else swMsPrm[i].lineSkipMode = TRUE; swMsPrm[i].enableLayoutGridDraw = gVdisModuleContext.vdisConfig.enableLayoutGridDraw; MultiCh_swMsGetDefaultLayoutPrm(i, &swMsPrm[i], FALSE); /* both from 0-16 chnl */ displayPrm[i].inQueParams[0].prevLinkId = gVdisModuleContext.swMsId[i]; displayPrm[i].inQueParams[0].prevLinkQueId = 0; displayPrm[i].displayRes = swMsPrm[i].maxOutRes; if (i == 1) #ifdef TI_814X_BUILD displayPrm[i].displayRes = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_SD].resolution; #else displayPrm[i].displayRes = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_DVO2].resolution; #endif } System_linkCreate(gVdecModuleContext.ipcBitsOutHLOSId,&ipcBitsOutHostPrm,sizeof(ipcBitsOutHostPrm)); System_linkCreate(gVdecModuleContext.ipcBitsInRTOSId,&ipcBitsInVideoPrm,sizeof(ipcBitsInVideoPrm)); System_linkCreate(gVdecModuleContext.decId, &decPrm, sizeof(decPrm)); System_linkCreate(gMultiCh_VdecVdisObj.ipcOutVideoId, &ipcOutVideoPrm, sizeof(ipcOutVideoPrm)); System_linkCreate(gMultiCh_VdecVdisObj.ipcInVpssId , &ipcInVpssPrm, sizeof(ipcInVpssPrm)); if (enableVideoFrameExport) { System_linkCreate(gVdisModuleContext.ipcFramesOutHostId , &ipcFramesOutHostPrm , sizeof(ipcFramesOutHostPrm)); System_linkCreate(gVdisModuleContext.ipcFramesInVpssFromHostId , &ipcFramesInVpssFromHostPrm , sizeof(ipcFramesInVpssFromHostPrm)); System_linkCreate(gMultiCh_VdecVdisObj.mergeId,&mergePrm,sizeof(mergePrm)); } System_linkCreate(gMultiCh_VdecVdisObj.dupId , &dupPrm , sizeof(dupPrm)); for(i=0; i<gVsysModuleContext.vsysConfig.numDisplays; i++) System_linkCreate(gVdisModuleContext.swMsId[i] , &swMsPrm[i], sizeof(swMsPrm[i])); for(i=0; i<gVsysModuleContext.vsysConfig.numDisplays; i++) System_linkCreate(gVdisModuleContext.displayId[i], &displayPrm[i], sizeof(displayPrm[i])); MultiCh_memPrintHeapStatus(); gMultiCh_VdecVdisObj.enableVideoFrameExport = enableVideoFrameExport; }