captureId = SYSTEM_LINK_ID_CAPTURE; deiId = SYSTEM_LINK_ID_DEI_HQ_0; sclrId = SYSTEM_LINK_ID_SCLR_INST_0; nsfId = SYSTEM_LINK_ID_NSF_0; ipcOutVpssId = SYSTEM_VPSS_LINK_ID_IPC_OUT_M3_0; ipcInVideoId = SYSTEM_VIDEO_LINK_ID_IPC_IN_M3_0; encId = SYSTEM_LINK_ID_VENC_0; ipcBitsOutVideoId = SYSTEM_VIDEO_LINK_ID_IPC_BITS_OUT_0; ipcBitsInHostId = SYSTEM_HOST_LINK_ID_IPC_BITS_IN_0; ipcFramesOutVpssId = SYSTEM_VPSS_LINK_ID_IPC_FRAMES_OUT_0; ipcFramesInDspId = SYSTEM_DSP_LINK_ID_IPC_FRAMES_IN_0; dspAlgId = SYSTEM_LINK_ID_ALG_0 ; helloWorldId = SYSTEM_LINK_ID_HELLOWORLD_0 ; for (i = 0; i < 2; i++) { vidDecVideoModeArgs[i].vipInstId = SYSTEM_CAPTURE_INST_VIP0_PORTA+i; vidDecVideoModeArgs[i].deviceId = DEVICE_VID_DEC_TVP5158_DRV; vidDecVideoModeArgs[i].numChInDevice = 4; vidDecVideoModeArgs[i].modeParams.videoIfMode = DEVICE_CAPT_VIDEO_IF_MODE_8BIT; vidDecVideoModeArgs[i].modeParams.videoDataFormat = SYSTEM_DF_YUV422P; vidDecVideoModeArgs[i].modeParams.standard = SYSTEM_STD_MUX_4CH_D1; vidDecVideoModeArgs[i].modeParams.videoCaptureMode = DEVICE_CAPT_VIDEO_CAPTURE_MODE_MULTI_CH_PIXEL_MUX_EMBEDDED_SYNC; vidDecVideoModeArgs[i].modeParams.videoSystem = DEVICE_VIDEO_DECODER_VIDEO_SYSTEM_AUTO_DETECT; vidDecVideoModeArgs[i].modeParams.videoCropEnable = FALSE; vidDecVideoModeArgs[i].modeParams.videoAutoDetectTimeout = -1; } Vcap_deviceCreate(vidDecVideoModeArgs, 2); Vcap_deviceControl(0, DEVICE_CMD_START, NULL, NULL); Vcap_deviceControl(1, DEVICE_CMD_START, NULL, NULL); capturePrm.numVipInst = 2; capturePrm.tilerEnable = FALSE; capturePrm.numBufsPerCh = NUM_BUFS_PER_CH; capturePrm.numExtraBufs = NUM_BUFS_PER_CH; capturePrm.outQueParams[0].nextLink = deiId; for (vipInstId = 0; vipInstId < capturePrm.numVipInst; vipInstId++) { pCaptureInstPrm = &capturePrm.vipInst[vipInstId]; pCaptureInstPrm->vipInstId = SYSTEM_CAPTURE_INST_VIP0_PORTA + vipInstId; 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; } deiPrm.inQueParams.prevLinkId = captureId; deiPrm.inQueParams.prevLinkQueId = 0; deiPrm.outQueParams[DEI_LINK_OUT_QUE_DEI_SC].nextLink = nsfId; deiPrm.outQueParams[DEI_LINK_OUT_QUE_VIP_SC].nextLink = ipcOutVpssId; deiPrm.numBufsPerCh[DEI_LINK_OUT_QUE_VIP_SC] = 16; deiPrm.numBufsPerCh[DEI_LINK_OUT_QUE_DEI_SC] = 16; deiPrm.setVipScYuv422Format = FALSE; deiPrm.inputDeiFrameRate = 48; deiPrm.outputDeiFrameRate = 48; deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].scaleMode = DEI_SCALE_MODE_RATIO; deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].ratio.widthRatio.numerator = 1; deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].ratio.widthRatio.denominator = 2; deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].ratio.heightRatio.numerator = 1; deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].ratio.heightRatio.denominator = 2; for (deiChIdx = 1; deiChIdx < DEI_LINK_MAX_CH; deiChIdx++) { deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][deiChIdx] = deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0]; } deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][0].scaleMode = DEI_SCALE_MODE_RATIO; deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][0].ratio.widthRatio.numerator = 1; deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][0].ratio.widthRatio.denominator = 2; deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][0].ratio.heightRatio.numerator = 1; deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][0].ratio.heightRatio.denominator = 2; for (deiChIdx = 1; deiChIdx < DEI_LINK_MAX_CH; deiChIdx++) { deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][deiChIdx] = deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][0]; } deiPrm.enableOut[DEI_LINK_OUT_QUE_DEI_SC] = TRUE; deiPrm.enableOut[DEI_LINK_OUT_QUE_VIP_SC] = TRUE; deiPrm.enableOut[DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT] = FALSE; deiPrm.tilerEnable[DEI_LINK_OUT_QUE_DEI_SC] = FALSE; deiPrm.tilerEnable[DEI_LINK_OUT_QUE_VIP_SC] = FALSE; deiPrm.comprEnable = FALSE; deiPrm.enableDeiForceBypass = FALSE; deiPrm.enableLineSkipSc = FALSE; nsfPrm.bypassNsf = FALSE; nsfPrm.tilerEnable = FALSE; nsfPrm.inQueParams.prevLinkId = deiId; nsfPrm.numOutQue = 1; nsfPrm.outQueParams[0].nextLink = ipcFramesOutVpssId; nsfPrm.inQueParams.prevLinkQueId = DEI_LINK_OUT_QUE_DEI_SC; nsfPrm.inputFrameRate = 48; nsfPrm.outputFrameRate = 48; nsfPrm.numBufsPerCh = 16; ipcFramesOutVpssPrm.baseCreateParams.inQueParams.prevLinkId = nsfId; ipcFramesOutVpssPrm.baseCreateParams.inQueParams.prevLinkQueId = 0; ipcFramesOutVpssPrm.baseCreateParams.inputFrameRate = 48; ipcFramesOutVpssPrm.baseCreateParams.outputFrameRate = 48; ipcFramesOutVpssPrm.baseCreateParams.notifyPrevLink = TRUE; ipcFramesOutVpssPrm.baseCreateParams.numOutQue = 1; ipcFramesOutVpssPrm.baseCreateParams.outQueParams[0].nextLink = ipcFramesInDspId ; ipcFramesOutVpssPrm.baseCreateParams.notifyNextLink = TRUE; ipcFramesOutVpssPrm.baseCreateParams.processLink = SYSTEM_LINK_ID_INVALID; ipcFramesOutVpssPrm.baseCreateParams.notifyProcessLink = FALSE; ipcFramesOutVpssPrm.baseCreateParams.noNotifyMode = FALSE; ipcFramesInDspPrm.baseCreateParams.inQueParams.prevLinkId = ipcFramesOutVpssId; ipcFramesInDspPrm.baseCreateParams.inQueParams.prevLinkQueId = 0; ipcFramesInDspPrm.baseCreateParams.numOutQue = 1; ipcFramesInDspPrm.baseCreateParams.outQueParams[0].nextLink = helloWorldId; ipcFramesInDspPrm.baseCreateParams.notifyPrevLink = TRUE; ipcFramesInDspPrm.baseCreateParams.notifyNextLink = TRUE; ipcFramesInDspPrm.baseCreateParams.noNotifyMode = FALSE; ipcFramesInDspPrm.baseCreateParams.inputFrameRate = 48; ipcFramesInDspPrm.baseCreateParams.outputFrameRate = 16; helloWorldPrm.inQueParams.prevLinkId = ipcFramesInDspId; helloWorldPrm.inQueParams.prevLinkQueId = 0; pIpcOutVpssPrm = &(IpcOutVpssPrm); pIpcOutVpssPrm->inQueParams.prevLinkId = deiId; pIpcOutVpssPrm->inQueParams.prevLinkQueId = DEI_LINK_OUT_QUE_VIP_SC; pIpcOutVpssPrm->inputFrameRate = 48; pIpcOutVpssPrm->outputFrameRate = 16; pIpcOutVpssPrm->numOutQue = 1; pIpcOutVpssPrm->outQueParams[0].nextLink = ipcInVideoId; pIpcOutVpssPrm->notifyNextLink = TRUE; pIpcOutVpssPrm->notifyPrevLink = TRUE; pIpcOutVpssPrm->noNotifyMode = FALSE; pIpcInVideoPrm = &(IpcInVideoPrm); pIpcInVideoPrm->inQueParams.prevLinkId = ipcOutVpssId; pIpcInVideoPrm->inQueParams.prevLinkQueId = 0; pIpcInVideoPrm->numOutQue = 1; pIpcInVideoPrm->outQueParams[0].nextLink = encId; pIpcInVideoPrm->notifyNextLink = TRUE; pIpcInVideoPrm->notifyPrevLink = TRUE; pIpcInVideoPrm->noNotifyMode = FALSE; pIpcInVideoPrm->inputFrameRate = 16; pIpcInVideoPrm->outputFrameRate = 16; pEncPrm = &(EncPrm); for(i=0;i<8;i++) { pEncPrm->chCreateParams[i].format = IVIDEO_H264BP; pEncPrm->chCreateParams[i].profile = IH264_BASELINE_PROFILE; pEncPrm->chCreateParams[i].dataLayout = IVIDEO_FIELD_SEPARATED; pEncPrm->chCreateParams[i].fieldMergeEncodeEnable = FALSE; pEncPrm->chCreateParams[i].defaultDynamicParams.intraFrameInterval = 100; pEncPrm->chCreateParams[i].encodingPreset = XDM_DEFAULT; pEncPrm->chCreateParams[i].enableAnalyticinfo = 0; pEncPrm->chCreateParams[i].rateControlPreset = IVIDEO_STORAGE; pEncPrm->chCreateParams[i].defaultDynamicParams.inputFrameRate = 16; pEncPrm->chCreateParams[i].defaultDynamicParams.targetBitRate = 1*1000*1000; pEncPrm->chCreateParams[i].defaultDynamicParams.interFrameInterval = 1; pEncPrm->chCreateParams[i].defaultDynamicParams.mvAccuracy = IVIDENC2_MOTIONVECTOR_QUARTERPEL; } pEncPrm->inQueParams.prevLinkId = ipcInVideoId; pEncPrm->inQueParams.prevLinkQueId = 0; pEncPrm->outQueParams.nextLink = ipcBitsOutVideoId; pIpcBitsOutVideoPrm = &(IpcBitsOutVideoPrm); pIpcBitsOutVideoPrm->baseCreateParams.inQueParams.prevLinkId = encId; pIpcBitsOutVideoPrm->baseCreateParams.inQueParams.prevLinkQueId = 0; pIpcBitsOutVideoPrm->baseCreateParams.numOutQue = 1; pIpcBitsOutVideoPrm->baseCreateParams.outQueParams[0].nextLink = ipcBitsInHostId; pIpcBitsOutVideoPrm->baseCreateParams.noNotifyMode = TRUE; pIpcBitsOutVideoPrm->baseCreateParams.notifyNextLink = FALSE; pIpcBitsOutVideoPrm->baseCreateParams.notifyPrevLink = TRUE; pIpcBitsInHostPrm = &(IpcBitsInHostPrm); pIpcBitsInHostPrm->baseCreateParams.inQueParams.prevLinkId = ipcBitsOutVideoId; pIpcBitsInHostPrm->baseCreateParams.inQueParams.prevLinkQueId = 0; pIpcBitsInHostPrm->baseCreateParams.outQueParams[0].nextLink = SYSTEM_LINK_ID_INVALID; pIpcBitsInHostPrm->baseCreateParams.noNotifyMode = TRUE; pIpcBitsInHostPrm->cbFxn = EightChan_bitsGetCbFxn; pIpcBitsInHostPrm->cbCtx = &g_thread_sync; pIpcBitsInHostPrm->baseCreateParams.notifyNextLink = FALSE; pIpcBitsInHostPrm->baseCreateParams.notifyPrevLink = FALSE; System_linkCreate(captureId, &capturePrm, sizeof(CaptureLink_CreateParams)); System_linkCreate(deiId,&(deiPrm), sizeof(DeiLink_CreateParams)); System_linkCreate(nsfId,&(nsfPrm), sizeof(NsfLink_CreateParams)); System_linkCreate(ipcFramesOutVpssId, &ipcFramesOutVpssPrm, sizeof(ipcFramesOutVpssPrm)); System_linkCreate(helloWorldId , &helloWorldPrm, sizeof(helloWorldPrm)); System_linkCreate(ipcOutVpssId, &IpcOutVpssPrm, sizeof(IpcLink_CreateParams)); System_linkCreate(ipcInVideoId, &IpcInVideoPrm, sizeof(IpcLink_CreateParams)); System_linkCreate(encId, &EncPrm, sizeof(EncLink_CreateParams)); System_linkCreate(ipcBitsOutVideoId, &IpcBitsOutVideoPrm, sizeof(IpcBitsOutLinkRTOS_CreateParams)); System_linkCreate(ipcBitsInHostId, &IpcBitsInHostPrm, sizeof(IpcBitsInLinkHLOS_CreateParams)); System_linkStart(ipcBitsInHostId); System_linkStart(ipcBitsOutVideoId); System_linkStart(encId); System_linkStart(ipcInVideoId); System_linkStart(ipcOutVpssId); System_linkStart(ipcFramesInDspId); System_linkStart(helloWorldId); System_linkStart(ipcFramesOutVpssId); System_linkStart(nsfId); System_linkStart(deiId); System_linkStart(captureId);