This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
版本应该是3.5的,看论坛中DVRRDK中的提供的usecase很多,但appro提供的就没有发现和dsp有关的usecase
另外一点,从给的文档看,swosd和scd都是在dsp上做的,相机好像也用到了,代码这块看的还不是很明白,好像给的几个usecase也没有涉及这两个地方,那如果要是想添加dsp的算法该如何入手呢?
还请TI的工程师帮忙回答一下,谢谢!
嗯,在usecase的multich_tristream_lowPower.c文件中,swosd link 是在vpss上面
完成的,并不是在dsp上完成的,DSP的例子好像是没有的
kunlong tian 说:补充一下:swosd这些在usecase里有作为link用到了,但在chain中好像没有体现是在dsp中做的?
请关注multich_tristream_smartAnalytics.c的usecase中的valink。valink是在DSP上面实现的,
利用用到了DSP。
Armstrong 说:请关注multich_tristream_smartAnalytics.c的usecase中的valink。valink是在DSP上面实现的,
利用用到了DSP。
非常感谢您的回复,不过不知道是我没找到还是appro ipnc rdk 3.5中没有这个usecase,我这里给的usecase只有6个,没有您说的:multich_tristream_smartAnalytics.c,不知道您能给我发一下么?我的邮箱是:t175010415@163.com
再次感谢.
据我所知,multich_tristream_smartAnalytics.c只存在与3.2版本中,3.5版本中这样的usecase存在于multich_tristream_fullfeature.c。
我的是APPRO RDK 3.0版本
具体见附件
/** ================================================================== * @file multich_tristream_smartAnalytics.c * * @path ipnc_mcfw/mcfw/src_linux/mcfw_api/usecases/ * * @desc This File contains. * =================================================================== * Copyright (c) Texas Instruments Inc 2011, 2012 * * Use of this software is controlled by the terms and conditions found * in the license agreement under which this software has been supplied * ===================================================================*/ /*------------------------------ TRIPLE OUT <1080p + D1 + MJPEG> ---------------------------------- SENSOR ________||_______ |----SALDRE ON--| CAMERA LINK | | | ISP LINK | | |________________| GLBCE_LINK | | __________________ | | CAMERA LINK | |---SALDRE ON---| ISP LINK | |________________| Capture RSZA RSZB 1080P60 D130 (YUV422I) (YUV420) | | | | HDMI DISPLAY----------(1)DUP_0 DUP_1(1) --------- TVOUT (0) (0) | | | | NSF | (YUV420) | | | --------------| |--------------- | | | | DUP_2(0)-------------| |-----------(0)DUP_3 (1) |---| | | (1) | | |---|-----| | |---------| | | | SCLAER MERGE | | | | DUP_4(1)--IPCFRAMESOUT(VPS) SWOSD (0) | | | | | | IPCFRAMESIN(DSP) IPCM3OUT(VPS) FD | | | | VA IPCM3IN(VID) | | H264ENC | | BITSOUT (VID) | | BITSIN (A8) ------------------------------------------------------------------------------------------*/ #include "mcfw/src_linux/mcfw_api/usecases/multich_common.h" #include "mcfw/src_linux/mcfw_api/usecases/multich_ipcbits.h" #include "demos/mcfw_api_demos/multich_usecase/ti_mcfw_ipnc_main.h" /*in YUV sensor case, Enabling GLBCE means enabling Memory 2 Memory */ #ifdef IMGS_OMNIVISION_OV10630 #define YUV_M2M_DRV_TEST #endif extern UInt32 gIsGlbceInitDone; extern UInt32 gIsDiplayToBeDisabled; extern GlbcePreset gGLBCE_AlgoPreset; #define _BYPASS_DISPLAY //Enable This to run the 3DNF /* ============================================================================= * Externs * ============================================================================= */ /* ============================================================================= * Use case code * ============================================================================= */ static SystemVideo_Ivahd2ChMap_Tbl systemVid_encDecIvaChMapTbl = { .isPopulated = 1, .ivaMap[0] = { .EncNumCh = 2, .EncChList = {0, 1}, .DecNumCh = 2, .DecChList = {0, 1}, }, }; #ifdef ENABLE_TILER #define TILER_ENABLE TRUE #else #define TILER_ENABLE FALSE #endif /* Merge Link for camera streams */ #define NUM_MERGE_LINK (1) #define CAM_STREAM_MERGE_IDX (0) /* Dup Links */ #define NUM_DUP_LINK (4) #define DIS_DUP_IDX (0) #define MJPEG_DUP_LINK_IDX (1) #define SCALER_DUP_IDX (2) #define VA_DUP_IDX (3) /* =================================================================== * @func MultiCh_createTriStreamFullFtr * * @desc Function does the following * * @modif This function modifies the following structures * * @inputs This function takes the following inputs * <argument name> * Description of usage * <argument name> * Description of usage * * @outputs <argument name> * Description of usage * * @return Return value of this function if any * ================================================================== */ Void MultiCh_createTriStreamSmartAnalytics() { UInt32 i; CameraLink_CreateParams cameraPrm; IspLink_CreateParams ispPrm; UInt32 ispId; GlbceLink_CreateParams glbcePrm; UInt32 glbceId; NsfLink_CreateParams nsfPrm; VnfLink_CreateParams vnfPrm; MergeLink_CreateParams mergePrm[NUM_MERGE_LINK]; IpcLink_CreateParams ipcOutVpssPrm; IpcLink_CreateParams ipcInVideoPrm; EncLink_CreateParams encPrm; DupLink_CreateParams dupPrm[NUM_DUP_LINK]; SclrLink_CreateParams sclrPrm; DisplayLink_CreateParams displayPrm; DisplayLink_CreateParams displayPrm_SD; FdLink_CreateParams fdPrm; SwosdLink_CreateParams swosdPrm; IpcBitsOutLinkRTOS_CreateParams ipcBitsOutVideoPrm; IpcBitsInLinkHLOS_CreateParams ipcBitsInHostPrm0; VstabLink_CreateParams vstabPrm; GlbceSupportLink_CreateParams glbceSupportPrm; CameraLink_VipInstParams *pCameraInstPrm; CameraLink_OutParams *pCameraOutPrm; IpcFramesOutLinkRTOS_CreateParams ipcFramesOutVpssPrm; IpcFramesInLinkRTOS_CreateParams ipcFramesInDspPrm; VaLink_CreateParams vaPrm; UInt32 mergeId[NUM_MERGE_LINK]; UInt32 ipcOutVpssId; UInt32 ipcInVideoId; UInt32 dupId[NUM_DUP_LINK]; UInt32 ipcFramesOutVpssId; UInt32 ipcFramesInDspId; UInt32 vstabId; UInt32 glbceSupportId; cameraPrm.glbceLinkId = 0; /* System init */ System_init(); /* IPC struct init */ MULTICH_INIT_STRUCT(IpcLink_CreateParams, ipcOutVpssPrm); MULTICH_INIT_STRUCT(IpcLink_CreateParams, ipcInVideoPrm); MULTICH_INIT_STRUCT(IpcBitsOutLinkRTOS_CreateParams, ipcBitsOutVideoPrm); MULTICH_INIT_STRUCT(IpcBitsInLinkHLOS_CreateParams, ipcBitsInHostPrm0); MULTICH_INIT_STRUCT(IpcFramesOutLinkRTOS_CreateParams, ipcFramesOutVpssPrm); MULTICH_INIT_STRUCT(IpcFramesInLinkRTOS_CreateParams, ipcFramesInDspPrm); OSA_printf("\n********** SMART ANALYTICS USECASE ********\n"); OSA_printf ("********* Entered Smart Analytics usecase - H264 1080p @60fps + H264 D1 @30fps + MJPEG 1080p @5fps ********\n\n"); 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); /* Link IDs */ gVcamModuleContext.cameraId = SYSTEM_LINK_ID_CAMERA; gVencModuleContext.encId = SYSTEM_LINK_ID_VENC_0; gMjpegModuleContext.mjpepEncId = SYSTEM_LINK_ID_MJPEG; mergeId[CAM_STREAM_MERGE_IDX] = SYSTEM_VPSS_LINK_ID_MERGE_0; dupId[DIS_DUP_IDX] = SYSTEM_VPSS_LINK_ID_DUP_0; dupId[MJPEG_DUP_LINK_IDX] = SYSTEM_VPSS_LINK_ID_DUP_1; dupId[SCALER_DUP_IDX] = SYSTEM_VPSS_LINK_ID_DUP_2; dupId[VA_DUP_IDX] = SYSTEM_VPSS_LINK_ID_DUP_3; gVcamModuleContext.sclrId = SYSTEM_LINK_ID_SCLR_INST_0; gVsysModuleContext.fdId = SYSTEM_LINK_ID_FD; gVsysModuleContext.swOsdId = SYSTEM_LINK_ID_SWOSD_0; gVsysModuleContext.vaId = SYSTEM_LINK_ID_VA_0; ispId = SYSTEM_LINK_ID_ISP_0; glbceId = SYSTEM_LINK_ID_GLBCE; vstabId = SYSTEM_LINK_ID_VSTAB_0; glbceSupportId = SYSTEM_LINK_ID_GLBCE_SUPPORT_0; /* display IDs */ gVdisModuleContext.displayId[0] = SYSTEM_LINK_ID_DISPLAY_0; /* ON AND OFF * CHIP HDMI */ gVdisModuleContext.displayId[VDIS_DEV_SD] = SYSTEM_LINK_ID_DISPLAY_2; /* IPC frame Link IDs */ ipcOutVpssId = SYSTEM_VPSS_LINK_ID_IPC_OUT_M3_0; ipcInVideoId = SYSTEM_VIDEO_LINK_ID_IPC_IN_M3_0; /* IPC bits link IDs */ gVencModuleContext.ipcBitsOutRTOSId = SYSTEM_VIDEO_LINK_ID_IPC_BITS_OUT_0; gVencModuleContext.ipcBitsInHLOSId = 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; if(gUI_mcfw_config.glbceEnable) { /* Camera Link params */ CameraLink_CreateParams_Init(&cameraPrm); if (gUI_mcfw_config.noisefilterMode == DSS_NSF_ON) { gVcamModuleContext.nsfId = SYSTEM_LINK_ID_NSF_0; gIsDiplayToBeDisabled = 0; cameraPrm.vnfLinkId = 0; } else { gVcamModuleContext.vnfId = SYSTEM_LINK_ID_VNF; cameraPrm.vnfLinkId = SYSTEM_LINK_ID_VNF; #ifdef USE_TNF2_FILTER gIsDiplayToBeDisabled = 1; #else gIsDiplayToBeDisabled = 0; #endif } cameraPrm.captureMode = CAMERA_LINK_CAPMODE_DDR; #ifdef YUV_M2M_DRV_TEST cameraPrm.outQueParams[0].nextLink = ispId; #else cameraPrm.outQueParams[0].nextLink = glbceId; #endif cameraPrm.ispLinkId = ispId; cameraPrm.vaLinkId = gVsysModuleContext.vaId; cameraPrm.vaStreamId = 1; /* This is for TVP5158 Audio Channels - Change it to 16 if there are 16 * audio channels connected in cascade */ cameraPrm.numAudioChannels = 0; cameraPrm.numVipInst = 1; #if (TILER_ENABLE == TRUE) cameraPrm.tilerEnable = TRUE; #else cameraPrm.tilerEnable = FALSE; #endif cameraPrm.vsEnable = gUI_mcfw_config.vsEnable; cameraPrm.vstabLinkId = vstabId; pCameraInstPrm = &cameraPrm.vipInst[0]; pCameraInstPrm->vipInstId = SYSTEM_CAMERA_INST_VP_CSI2; pCameraInstPrm->videoDecoderId = MultiCh_getSensorId(gUI_mcfw_config.sensorId); pCameraInstPrm->inDataFormat = SYSTEM_DF_YUV420SP_VU; #ifdef IMGS_OMNIVISION_OV10630 pCameraInstPrm->sensorOutWidth = 1280; pCameraInstPrm->sensorOutHeight = 720; #else pCameraInstPrm->sensorOutWidth = 1920; pCameraInstPrm->sensorOutHeight = 1080; #endif if (gUI_mcfw_config.noisefilterMode == DSS_NSF_ON) { pCameraInstPrm->standard = SYSTEM_STD_1080P_30; } else { pCameraInstPrm->standard = SYSTEM_STD_1080P_30; cameraPrm.issVnfEnable = 1; } pCameraInstPrm->numOutput = 1; pCameraOutPrm = &pCameraInstPrm->outParams[0]; pCameraOutPrm->scEnable = FALSE; #ifdef IMGS_OMNIVISION_OV10630 pCameraOutPrm->dataFormat = SYSTEM_DF_YUV422I_VYUY; pCameraOutPrm->scOutWidth = 1280; pCameraOutPrm->scOutHeight = 720; #else pCameraOutPrm->dataFormat = SYSTEM_DF_BAYER_RAW; pCameraOutPrm->scOutWidth = 1920; pCameraOutPrm->scOutHeight = 1080; #endif pCameraOutPrm->outQueId = 0; /* 2A config */ cameraPrm.t2aConfig.n2A_vendor = gUI_mcfw_config.n2A_vendor; cameraPrm.t2aConfig.n2A_mode = gUI_mcfw_config.n2A_mode; } else { /* Camera Link params */ CameraLink_CreateParams_Init(&cameraPrm); if (gUI_mcfw_config.noisefilterMode == DSS_NSF_ON) { gVcamModuleContext.nsfId = SYSTEM_LINK_ID_NSF_0; gIsDiplayToBeDisabled = 0; cameraPrm.vnfLinkId = 0; } else { gVcamModuleContext.vnfId = SYSTEM_LINK_ID_VNF; cameraPrm.vnfLinkId = SYSTEM_LINK_ID_VNF; #ifdef USE_TNF2_FILTER gIsDiplayToBeDisabled = 1; #else gIsDiplayToBeDisabled = 0; #endif } cameraPrm.captureMode = CAMERA_LINK_CAPMODE_ISIF; if(gIsDiplayToBeDisabled == 0) cameraPrm.outQueParams[0].nextLink = dupId[DIS_DUP_IDX]; else { if (gUI_mcfw_config.noisefilterMode == DSS_NSF_ON) cameraPrm.outQueParams[0].nextLink = gVcamModuleContext.nsfId; else cameraPrm.outQueParams[0].nextLink = gVcamModuleContext.vnfId; } cameraPrm.outQueParams[1].nextLink = dupId[SCALER_DUP_IDX]; cameraPrm.vaLinkId = gVsysModuleContext.vaId; cameraPrm.vaStreamId = 1; /* This is for TVP5158 Audio Channels - Change it to 16 if there are 16 * audio channels connected in cascade */ cameraPrm.numAudioChannels = 1; cameraPrm.numVipInst = 1; #if (TILER_ENABLE == TRUE) cameraPrm.tilerEnable = TRUE; #else cameraPrm.tilerEnable = FALSE; #endif cameraPrm.vsEnable = gUI_mcfw_config.vsEnable; cameraPrm.vstabLinkId = vstabId; pCameraInstPrm = &cameraPrm.vipInst[0]; pCameraInstPrm->vipInstId = SYSTEM_CAMERA_INST_VP_CSI2; pCameraInstPrm->videoDecoderId = MultiCh_getSensorId(gUI_mcfw_config.sensorId); pCameraInstPrm->inDataFormat = SYSTEM_DF_YUV420SP_VU; #ifdef IMGS_OMNIVISION_OV10630 pCameraInstPrm->sensorOutWidth = 1280; pCameraInstPrm->sensorOutHeight = 720; #else pCameraInstPrm->sensorOutWidth = 1920; pCameraInstPrm->sensorOutHeight = 1080; #endif if (gUI_mcfw_config.noisefilterMode == DSS_NSF_ON) { pCameraInstPrm->standard = SYSTEM_STD_1080P_60; } else { pCameraInstPrm->standard = SYSTEM_STD_1080P_30; cameraPrm.issVnfEnable = 1; } pCameraInstPrm->numOutput = 2; /* First stream */ pCameraOutPrm = &pCameraInstPrm->outParams[0]; if(gIsDiplayToBeDisabled == 0) pCameraOutPrm->dataFormat = SYSTEM_DF_YUV422I_VYUY; else pCameraOutPrm->dataFormat = SYSTEM_DF_YUV420SP_VU; pCameraOutPrm->scEnable = FALSE; #ifdef IMGS_OMNIVISION_OV10630 pCameraOutPrm->scOutWidth = 1280; pCameraOutPrm->scOutHeight = 720; #else /* When VS is enabled then scOutWidth/scOutHeight cannot be equal to sensorOutWidth/sensorOutHeight */ if(cameraPrm.vsEnable == 0) { pCameraOutPrm->scOutWidth = 1920; pCameraOutPrm->scOutHeight = 1080; } else { pCameraOutPrm->scOutWidth = 1600; pCameraOutPrm->scOutHeight = 900; } #endif pCameraOutPrm->outQueId = 0; /* Second stream */ pCameraOutPrm = &pCameraInstPrm->outParams[1]; pCameraOutPrm->dataFormat = SYSTEM_DF_YUV420SP_VU; pCameraOutPrm->scEnable = FALSE; pCameraOutPrm->scOutWidth = 720; pCameraOutPrm->scOutHeight = 480;//576;//480; pCameraOutPrm->standard = SYSTEM_STD_NTSC;//SYSTEM_STD_PAL; pCameraOutPrm->outQueId = 1; /* 2A config */ cameraPrm.t2aConfig.n2A_vendor = gUI_mcfw_config.n2A_vendor; cameraPrm.t2aConfig.n2A_mode = gUI_mcfw_config.n2A_mode; } /* vstab Link params */ vstabPrm.totalFrameWidth = pCameraInstPrm->sensorOutWidth; vstabPrm.totalFrameHeight = pCameraInstPrm->sensorOutHeight; glbceSupportPrm.glbceLinkID = glbceId; if(gUI_mcfw_config.glbceEnable) { cameraPrm.glbceLinkId = glbceId; /* Glbce Link Params */ glbcePrm.inQueParams.prevLinkId = gVcamModuleContext.cameraId; glbcePrm.inQueParams.prevLinkQueId = 0; glbcePrm.outQueParams.nextLink = ispId; glbcePrm.chCreateParams[0].preset = gGLBCE_AlgoPreset; glbcePrm.glbceEnable = gUI_mcfw_config.glbceEnable; glbcePrm.glbceSupportID = glbceSupportId; /* isp link params */ #ifdef YUV_M2M_DRV_TEST ispPrm.inQueParams.prevLinkId = gVcamModuleContext.cameraId; #else ispPrm.inQueParams.prevLinkId = glbceId; #endif ispPrm.inQueParams.prevLinkQueId = 0; ispPrm.numOutQueue = 2; if(gIsDiplayToBeDisabled == 1) { if (gUI_mcfw_config.noisefilterMode == DSS_NSF_ON) ispPrm.outQueInfo[0].nextLink = gVcamModuleContext.nsfId; else ispPrm.outQueInfo[0].nextLink = gVcamModuleContext.vnfId; }else { ispPrm.outQueInfo[0].nextLink = dupId[DIS_DUP_IDX]; } ispPrm.outQueInfo[1].nextLink = dupId[SCALER_DUP_IDX]; #if defined(TI_8107_BUILD) ispPrm.clkDivM = 10; ispPrm.clkDivN = 30; #else ispPrm.clkDivM = 10; ispPrm.clkDivN = 20; #endif if(gIsDiplayToBeDisabled ==0) ispPrm.outQueuePrm[0].dataFormat = SYSTEM_DF_YUV422I_VYUY; else ispPrm.outQueuePrm[0].dataFormat = SYSTEM_DF_YUV420SP_VU; #ifdef IMGS_OMNIVISION_OV10630 ispPrm.outQueuePrm[0].width = 1280; ispPrm.outQueuePrm[0].height = 720; #else ispPrm.outQueuePrm[0].width = 1920; ispPrm.outQueuePrm[0].height = 1080; #endif ispPrm.outQueuePrm[1].dataFormat = SYSTEM_DF_YUV420SP_VU; ispPrm.outQueuePrm[1].width = 720; ispPrm.outQueuePrm[1].height = 480;//576; ispPrm.outQueuePrm[1].standard = SYSTEM_STD_NTSC;//SYSTEM_STD_PAL;//SYSTEM_STD_NTSC; } if(gIsDiplayToBeDisabled == 0) { /* Display dup link params */ if(gUI_mcfw_config.glbceEnable) dupPrm[DIS_DUP_IDX].inQueParams.prevLinkId = ispId; else dupPrm[DIS_DUP_IDX].inQueParams.prevLinkId = gVcamModuleContext.cameraId; dupPrm[DIS_DUP_IDX].inQueParams.prevLinkQueId = 0; dupPrm[DIS_DUP_IDX].numOutQue = 2; if (gUI_mcfw_config.noisefilterMode == DSS_NSF_ON) dupPrm[DIS_DUP_IDX].outQueParams[0].nextLink = gVcamModuleContext.nsfId; else dupPrm[DIS_DUP_IDX].outQueParams[0].nextLink = gVcamModuleContext.vnfId; dupPrm[DIS_DUP_IDX].outQueParams[1].nextLink = gVdisModuleContext.displayId[0]; dupPrm[DIS_DUP_IDX].notifyNextLink = TRUE; } if (gUI_mcfw_config.noisefilterMode == DSS_NSF_ON) { /* NSF Link params */ NsfLink_CreateParams_Init(&nsfPrm); if (gUI_mcfw_config.snfEnable) { if (gUI_mcfw_config.tnfEnable) nsfPrm.bypassNsf = NSF_LINK_BYPASS_NONE; else nsfPrm.bypassNsf = NSF_LINK_BYPASS_TNF; } else { if (gUI_mcfw_config.tnfEnable) nsfPrm.bypassNsf = NSF_LINK_BYPASS_SNF; else nsfPrm.bypassNsf = NSF_LINK_BYPASS_SNF_TNF; } #if (TILER_ENABLE == TRUE) nsfPrm.tilerEnable = TRUE; #else nsfPrm.tilerEnable = FALSE; #endif if(gIsDiplayToBeDisabled == 0) nsfPrm.inQueParams.prevLinkId = dupId[DIS_DUP_IDX]; else { if(gUI_mcfw_config.glbceEnable) nsfPrm.inQueParams.prevLinkId = ispId; else nsfPrm.inQueParams.prevLinkId = gVcamModuleContext.cameraId; } nsfPrm.inQueParams.prevLinkQueId = 0; nsfPrm.numOutQue = 1; nsfPrm.numBufsPerCh = 4; nsfPrm.inputFrameRate = 60; nsfPrm.outputFrameRate = 60; nsfPrm.outQueParams[0].nextLink = dupId[MJPEG_DUP_LINK_IDX]; nsfPrm.nsfLevel = 7; // range is 0 - 7 } else { VnfLink_ChCreateParams *vnfParams; /* Vnf Link Params */ if(gIsDiplayToBeDisabled == 0) vnfPrm.inQueParams.prevLinkId = dupId[DIS_DUP_IDX]; else { if(gUI_mcfw_config.glbceEnable) vnfPrm.inQueParams.prevLinkId =ispId; else vnfPrm.inQueParams.prevLinkId = gVcamModuleContext.cameraId; } vnfPrm.inQueParams.prevLinkQueId = 0; vnfPrm.outQueParams.nextLink = dupId[MJPEG_DUP_LINK_IDX]; vnfParams = &vnfPrm.chCreateParams[0]; vnfParams->sParams.eOutputFormat = SYSTEM_DF_YUV420SP_VU; if (gUI_mcfw_config.ldcEnable) vnfParams->sParams.eOperateMode = VNF_LINK_LDC_AFFINE_NSF_TNF; else { if(gIsDiplayToBeDisabled == 0) vnfParams->sParams.eOperateMode = VNF_LINK_AFFINE_NSF_TNF; else vnfParams->sParams.eOperateMode = VNF_LINK_3DNF; } vnfParams->dParams.ldcParams.eInterpolationLuma = VNF_LINK_YINTERPOLATION_BILINEAR; vnfParams->dParams.ldcParams.unPixelPad = 6; vnfParams->dParams.nsfParams.bLumaEn = TRUE; vnfParams->dParams.nsfParams.bChromaEn = TRUE; vnfParams->dParams.nsfParams.eSmoothVal = VNF_LINK_SMOOTH_1; vnfParams->dParams.nsfParams.bSmoothLumaEn = TRUE; vnfParams->dParams.nsfParams.bSmoothChromaEn = TRUE; vnfParams->dParams.tnfParams.useDefault = TRUE; vnfParams->dParams.nsfFilter.eFilterParam = VNF_LINK_PARAM_DEFAULT; vnfParams->dParams.nsfEdge.eEdgeParam = VNF_LINK_PARAM_DEFAULT; vnfParams->dParams.nsfShading.eShdParam = VNF_LINK_PARAM_DEFAULT; vnfParams->dParams.nsfDesaturation.eDesatParam = VNF_LINK_PARAM_DEFAULT; vnfPrm.chCreateParams[0].bSnfEnable = gUI_mcfw_config.snfEnable; vnfPrm.chCreateParams[0].bTnfEnable = gUI_mcfw_config.tnfEnable; } /* Supported resolutions for HDCOMP - 720P, XGA, SXGA If the resolution * is changed for HDCOMP same resolution should be passed to DVO2 as they * are tied together. */ //displayRes[SYSTEM_DC_VENC_HDMI] = // gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_HDMI].resolution; //displayRes[SYSTEM_DC_VENC_HDCOMP] = // gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_HDCOMP].resolution; //displayRes[SYSTEM_DC_VENC_DVO2] = // gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_DVO2].resolution; //displayRes[SYSTEM_DC_VENC_SD] = // gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_SD].resolution; /* display link params */ MULTICH_INIT_STRUCT(DisplayLink_CreateParams,displayPrm); displayPrm.inQueParams[0].prevLinkId = dupId[DIS_DUP_IDX]; displayPrm.inQueParams[0].prevLinkQueId = 1; displayPrm.displayRes = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_HDMI].resolution;; /* Dup Link params */ if (gUI_mcfw_config.noisefilterMode == DSS_NSF_ON) dupPrm[MJPEG_DUP_LINK_IDX].inQueParams.prevLinkId = gVcamModuleContext.nsfId; else dupPrm[MJPEG_DUP_LINK_IDX].inQueParams.prevLinkId = gVcamModuleContext.vnfId; dupPrm[MJPEG_DUP_LINK_IDX].inQueParams.prevLinkQueId = 0; dupPrm[MJPEG_DUP_LINK_IDX].numOutQue = 2; dupPrm[MJPEG_DUP_LINK_IDX].outQueParams[0].nextLink = mergeId[CAM_STREAM_MERGE_IDX]; dupPrm[MJPEG_DUP_LINK_IDX].outQueParams[1].nextLink = mergeId[CAM_STREAM_MERGE_IDX]; dupPrm[MJPEG_DUP_LINK_IDX].notifyNextLink = TRUE; /* Dup link for Scaler params */ if(gUI_mcfw_config.glbceEnable) dupPrm[SCALER_DUP_IDX].inQueParams.prevLinkId = ispId; else dupPrm[SCALER_DUP_IDX].inQueParams.prevLinkId = gVcamModuleContext.cameraId; dupPrm[SCALER_DUP_IDX].inQueParams.prevLinkQueId = 1; dupPrm[SCALER_DUP_IDX].numOutQue = 3; dupPrm[SCALER_DUP_IDX].outQueParams[0].nextLink = mergeId[CAM_STREAM_MERGE_IDX]; dupPrm[SCALER_DUP_IDX].outQueParams[1].nextLink = gVcamModuleContext.sclrId; dupPrm[SCALER_DUP_IDX].outQueParams[2].nextLink = gVdisModuleContext.displayId[VDIS_DEV_SD]; dupPrm[SCALER_DUP_IDX].notifyNextLink = TRUE; /* display link params */ MULTICH_INIT_STRUCT(DisplayLink_CreateParams,displayPrm_SD); displayPrm_SD.numInputQueues = 1; displayPrm_SD.activeQueue = 0; displayPrm_SD.inQueParams[0].prevLinkId = dupId[SCALER_DUP_IDX]; displayPrm_SD.inQueParams[0].prevLinkQueId = 2; displayPrm_SD.displayRes = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_SD].resolution; /* Merge Link params */ mergePrm[CAM_STREAM_MERGE_IDX].numInQue = 3; mergePrm[CAM_STREAM_MERGE_IDX].inQueParams[0].prevLinkId = dupId[MJPEG_DUP_LINK_IDX]; mergePrm[CAM_STREAM_MERGE_IDX].inQueParams[0].prevLinkQueId = 0; mergePrm[CAM_STREAM_MERGE_IDX].inQueParams[1].prevLinkId = dupId[SCALER_DUP_IDX]; mergePrm[CAM_STREAM_MERGE_IDX].inQueParams[1].prevLinkQueId = 0; mergePrm[CAM_STREAM_MERGE_IDX].inQueParams[2].prevLinkId = dupId[MJPEG_DUP_LINK_IDX]; mergePrm[CAM_STREAM_MERGE_IDX].inQueParams[2].prevLinkQueId = 1; mergePrm[CAM_STREAM_MERGE_IDX].outQueParams.nextLink = gVsysModuleContext.swOsdId; mergePrm[CAM_STREAM_MERGE_IDX].notifyNextLink = TRUE; /* SWOSD Link Params */ swosdPrm.inQueParams.prevLinkId = mergeId[CAM_STREAM_MERGE_IDX]; swosdPrm.inQueParams.prevLinkQueId = 0; swosdPrm.outQueParams.nextLink = ipcOutVpssId; swosdPrm.frameSync = 1; // frame sync is // required swosdPrm.frameSycChId = 1; // frame sync is // required on // channel # 1 /* Scaler Link Params */ SclrLink_CreateParams_Init(&sclrPrm); sclrPrm.inQueParams.prevLinkId = dupId[SCALER_DUP_IDX]; sclrPrm.inQueParams.prevLinkQueId = 1; sclrPrm.outQueParams.nextLink = dupId[VA_DUP_IDX]; sclrPrm.tilerEnable = FALSE; sclrPrm.enableLineSkipSc = FALSE; sclrPrm.inputFrameRate = 30; sclrPrm.outputFrameRate = 30; sclrPrm.scaleMode = DEI_SCALE_MODE_ABSOLUTE; sclrPrm.scaleMode = DEI_SCALE_MODE_ABSOLUTE; sclrPrm.outScaleFactor.absoluteResolution.outWidth = 320; sclrPrm.outScaleFactor.absoluteResolution.outHeight = 192; sclrPrm.outDataFormat = VF_YUV420SP_UV; sclrPrm.pathId = SCLR_LINK_SEC0_SC3; dupPrm[VA_DUP_IDX].inQueParams.prevLinkId = gVcamModuleContext.sclrId; dupPrm[VA_DUP_IDX].inQueParams.prevLinkQueId = 0; dupPrm[VA_DUP_IDX].numOutQue = 2; dupPrm[VA_DUP_IDX].outQueParams[0].nextLink = gVsysModuleContext.fdId; dupPrm[VA_DUP_IDX].outQueParams[1].nextLink = ipcFramesOutVpssId; dupPrm[VA_DUP_IDX].notifyNextLink = TRUE; /* FD Link Params */ fdPrm.inQueParams.prevLinkId = dupId[VA_DUP_IDX]; fdPrm.inQueParams.prevLinkQueId = 0; fdPrm.swOsdId = gVsysModuleContext.swOsdId; // SW OSD link ID // used for frame // sync /* IPC Frames Out VPSS for VA link params */ ipcFramesOutVpssPrm.baseCreateParams.inQueParams.prevLinkId = dupId[VA_DUP_IDX]; ipcFramesOutVpssPrm.baseCreateParams.inQueParams.prevLinkQueId = 1; ipcFramesOutVpssPrm.baseCreateParams.notifyPrevLink = TRUE; ipcFramesOutVpssPrm.baseCreateParams.inputFrameRate = 30; ipcFramesOutVpssPrm.baseCreateParams.outputFrameRate = 30; 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; /* IPC Frames in DSP for VA link params */ ipcFramesInDspPrm.baseCreateParams.inQueParams.prevLinkId = ipcFramesOutVpssId; ipcFramesInDspPrm.baseCreateParams.inQueParams.prevLinkQueId = 0; ipcFramesInDspPrm.baseCreateParams.numOutQue = 1; ipcFramesInDspPrm.baseCreateParams.outQueParams[0].nextLink = gVsysModuleContext.vaId; ipcFramesInDspPrm.baseCreateParams.notifyPrevLink = TRUE; ipcFramesInDspPrm.baseCreateParams.notifyNextLink = TRUE; ipcFramesInDspPrm.baseCreateParams.noNotifyMode = FALSE; /* VA link params */ VaLink_CreateParams_Init(&vaPrm); vaPrm.inQueParams.prevLinkId = ipcFramesInDspId; vaPrm.inQueParams.prevLinkQueId = 0; vaPrm.encLinkId = gVencModuleContext.encId; vaPrm.swosdLinkId = gVsysModuleContext.swOsdId; /* IPC Out VPSS link params */ ipcOutVpssPrm.inQueParams.prevLinkId = gVsysModuleContext.swOsdId; ipcOutVpssPrm.inQueParams.prevLinkQueId = 0; ipcOutVpssPrm.numOutQue = 1; ipcOutVpssPrm.outQueParams[0].nextLink = ipcInVideoId; ipcOutVpssPrm.notifyNextLink = TRUE; ipcOutVpssPrm.notifyPrevLink = TRUE; ipcOutVpssPrm.noNotifyMode = FALSE; /* IPC In VIDEO params */ ipcInVideoPrm.inQueParams.prevLinkId = ipcOutVpssId; ipcInVideoPrm.inQueParams.prevLinkQueId = 0; ipcInVideoPrm.numOutQue = 1; ipcInVideoPrm.outQueParams[0].nextLink = gVencModuleContext.encId; ipcInVideoPrm.notifyNextLink = TRUE; ipcInVideoPrm.notifyPrevLink = TRUE; ipcInVideoPrm.noNotifyMode = FALSE; /* Video Encoder Link params */ MULTICH_INIT_STRUCT(EncLink_CreateParams, encPrm); { EncLink_ChCreateParams *pLinkChPrm; EncLink_ChDynamicParams *pLinkDynPrm; VENC_CHN_DYNAMIC_PARAM_S *pDynPrm; VENC_CHN_PARAMS_S *pChPrm; for (i = 0; i < VENC_PRIMARY_CHANNELS; i++) { pLinkChPrm = &encPrm.chCreateParams[i]; pLinkDynPrm = &pLinkChPrm->defaultDynamicParams; pChPrm = &gVencModuleContext.vencConfig.encChannelParams[i]; pDynPrm = &pChPrm->dynamicParam; switch(gUI_mcfw_config.demoCfg.codec_combo) { case 0: pLinkChPrm->format = IVIDEO_H264HP; break; //"SINGLE_H264" case 1: pLinkChPrm->format = IVIDEO_MPEG4SP; break; //"SINGLE_MPEG4" case 2: pLinkChPrm->format = IVIDEO_MJPEG; break; //"SINGLE_JPEG" case 3: pLinkChPrm->format = (i==0)? IVIDEO_H264HP:IVIDEO_MJPEG; break; //"H264_JPEG" case 4: pLinkChPrm->format = (i==0)? IVIDEO_MPEG4SP:IVIDEO_MJPEG; break; //"MPEG4_JPEG" case 5: pLinkChPrm->format = (i==0)? IVIDEO_H264HP:IVIDEO_H264HP; break; //"DUAL_H264" case 6: pLinkChPrm->format = (i==0)? IVIDEO_MPEG4SP:IVIDEO_MPEG4SP; break; //"DUAL_MPEG4" case 7: pLinkChPrm->format = (i==0)? IVIDEO_H264HP:IVIDEO_MPEG4SP; break; //"H264_MPEG4" case 8: pLinkChPrm->format = (i==0)? IVIDEO_H264HP:IVIDEO_H264HP; break; //"TRIPLE_H264" case 9: pLinkChPrm->format = (i==0)? IVIDEO_MPEG4SP:IVIDEO_MPEG4SP; break; //"TRIPLE_MPEG4" default: pLinkChPrm->format = IVIDEO_H264HP; } pLinkChPrm->profile = gVencModuleContext.vencConfig.h264Profile[i]; pLinkChPrm->dataLayout = IVIDEO_PROGRESSIVE; pLinkChPrm->fieldMergeEncodeEnable = FALSE; pLinkChPrm->enableAnalyticinfo = pChPrm->enableAnalyticinfo; pLinkChPrm->maxBitRate = pChPrm->maxBitRate; pLinkChPrm->encodingPreset = pChPrm->encodingPreset; pLinkChPrm->rateControlPreset = IVIDEO_USER_DEFINED; //pChPrm->rcType; pLinkChPrm->enableHighSpeed = FALSE; pLinkChPrm->enableWaterMarking = pChPrm->enableWaterMarking; pLinkChPrm->StreamPreset = gUI_mcfw_config.StreamPreset[i]; pLinkDynPrm->intraFrameInterval = pDynPrm->intraFrameInterval; pLinkDynPrm->targetBitRate = pDynPrm->targetBitRate; pLinkDynPrm->interFrameInterval = 1; pLinkDynPrm->mvAccuracy = IVIDENC2_MOTIONVECTOR_QUARTERPEL; pLinkDynPrm->inputFrameRate = pDynPrm->inputFrameRate; pLinkDynPrm->rcAlg = pDynPrm->rcAlg; pLinkDynPrm->qpMin = pDynPrm->qpMin; pLinkDynPrm->qpMax = pDynPrm->qpMax; pLinkDynPrm->qpInit = pDynPrm->qpInit; pLinkDynPrm->vbrDuration = pDynPrm->vbrDuration; pLinkDynPrm->vbrSensitivity = pDynPrm->vbrSensitivity; encPrm.numBufPerCh[i] = 4; gVencModuleContext.encFormat[i] = pLinkChPrm->format; } } /* Video Encoder Framerate */ encPrm.chCreateParams[0].defaultDynamicParams.inputFrameRate = 60; // ENC_LINK_DEFAULT_ALGPARAMS_INPUTFRAMERATE; encPrm.chCreateParams[1].defaultDynamicParams.inputFrameRate = 30; // ENC_LINK_DEFAULT_ALGPARAMS_INPUTFRAMERATE; if(cameraPrm.captureMode == CAMERA_LINK_CAPMODE_DDR) { encPrm.vsEnable = 0; } else { encPrm.vsEnable = gUI_mcfw_config.vsEnable; } if(gUI_mcfw_config.vaUseCase == TRUE) { encPrm.isVaUseCase = 1; } else { encPrm.isVaUseCase = 0; } for (i = VENC_PRIMARY_CHANNELS; i < (VENC_CHN_MAX - 1); i++) { encPrm.chCreateParams[i].format = IVIDEO_MJPEG; encPrm.chCreateParams[i].profile = 0; encPrm.chCreateParams[i].dataLayout = IVIDEO_PROGRESSIVE; encPrm.chCreateParams[i].fieldMergeEncodeEnable = FALSE; encPrm.chCreateParams[i].defaultDynamicParams.intraFrameInterval = 0; encPrm.chCreateParams[i].encodingPreset = 0; encPrm.chCreateParams[i].enableAnalyticinfo = 0; encPrm.chCreateParams[i].enableWaterMarking = 0; encPrm.chCreateParams[i].defaultDynamicParams.inputFrameRate = 60; encPrm.chCreateParams[i].rateControlPreset = 0; encPrm.chCreateParams[i].defaultDynamicParams.targetBitRate = 100 * 1000; encPrm.chCreateParams[i].defaultDynamicParams.interFrameInterval = 0; encPrm.chCreateParams[i].defaultDynamicParams.mvAccuracy = 0; } encPrm.inQueParams.prevLinkId = ipcInVideoId; encPrm.inQueParams.prevLinkQueId = 0; encPrm.outQueParams.nextLink = gVencModuleContext.ipcBitsOutRTOSId; /* IPC Bits Out VIDEO Link params */ ipcBitsOutVideoPrm.baseCreateParams.inQueParams.prevLinkId = gVencModuleContext.encId; ipcBitsOutVideoPrm.baseCreateParams.inQueParams.prevLinkQueId = 0; ipcBitsOutVideoPrm.baseCreateParams.numOutQue = 1; ipcBitsOutVideoPrm.baseCreateParams.outQueParams[0].nextLink = gVencModuleContext.ipcBitsInHLOSId; MultiCh_ipcBitsInitCreateParams_BitsOutRTOS(&ipcBitsOutVideoPrm, TRUE); /* IPC Bits In HOST Link params */ ipcBitsInHostPrm0.baseCreateParams.inQueParams.prevLinkId = gVencModuleContext.ipcBitsOutRTOSId; ipcBitsInHostPrm0.baseCreateParams.inQueParams.prevLinkQueId = 0; MultiCh_ipcBitsInitCreateParams_BitsInHLOS(&ipcBitsInHostPrm0); MultiCh_displayCtrlInit(&gVdisModuleContext.vdisConfig); /* Links Creation */ /* Camera Link */ System_linkCreate(gVcamModuleContext.cameraId, &cameraPrm, sizeof(cameraPrm)); System_linkControl(gVcamModuleContext.cameraId, CAMERA_LINK_CMD_DETECT_VIDEO, NULL, 0, TRUE); if(gUI_mcfw_config.glbceEnable) { System_linkCreate(glbceSupportId, &glbceSupportPrm,sizeof(glbceSupportPrm)); /* glbce link create */ #ifdef YUV_M2M_DRV_TEST #else System_linkCreate(glbceId, &glbcePrm,sizeof(glbcePrm)); #endif /* cam pp link create */ System_linkCreate(ispId, &ispPrm,sizeof(ispPrm)); gIsGlbceInitDone = 1; } else { gIsGlbceInitDone = 0; } /* Dup link for display */ if(gIsDiplayToBeDisabled == 0) System_linkCreate(dupId[DIS_DUP_IDX], &dupPrm[DIS_DUP_IDX], sizeof(dupPrm[DIS_DUP_IDX])); if (gUI_mcfw_config.noisefilterMode == DSS_NSF_ON) /* NSF Link */ System_linkCreate(gVcamModuleContext.nsfId, &nsfPrm, sizeof(nsfPrm)); else /* Vnf Link */ System_linkCreate(gVcamModuleContext.vnfId, &vnfPrm, sizeof(vnfPrm)); /* Dup link for MJPEG */ System_linkCreate(dupId[MJPEG_DUP_LINK_IDX], &dupPrm[MJPEG_DUP_LINK_IDX], sizeof(dupPrm[MJPEG_DUP_LINK_IDX])); /* Dup Link for Scaler */ System_linkCreate(dupId[SCALER_DUP_IDX], &dupPrm[SCALER_DUP_IDX], sizeof(dupPrm[SCALER_DUP_IDX])); /* Merge Link */ System_linkCreate(mergeId[CAM_STREAM_MERGE_IDX], &mergePrm[CAM_STREAM_MERGE_IDX], sizeof(mergePrm[CAM_STREAM_MERGE_IDX])); /* SWOSD Link */ System_linkCreate(gVsysModuleContext.swOsdId, &swosdPrm, sizeof(swosdPrm)); /* Scaler Link */ System_linkCreate(gVcamModuleContext.sclrId, &sclrPrm, sizeof(sclrPrm)); /* Dup link for VA */ System_linkCreate(dupId[VA_DUP_IDX], &dupPrm[VA_DUP_IDX], sizeof(dupPrm[VA_DUP_IDX])); /* FD Link */ System_linkCreate(gVsysModuleContext.fdId, &fdPrm, sizeof(fdPrm)); /* IPC Links */ System_linkCreate(ipcOutVpssId, &ipcOutVpssPrm, sizeof(ipcOutVpssPrm)); System_linkCreate(ipcInVideoId, &ipcInVideoPrm, sizeof(ipcInVideoPrm)); /* IPC Frames links */ System_linkCreate(ipcFramesOutVpssId, &ipcFramesOutVpssPrm, sizeof(ipcFramesOutVpssPrm)); System_linkCreate(ipcFramesInDspId, &ipcFramesInDspPrm, sizeof(ipcFramesInDspPrm)); /* VA link */ System_linkCreate(gVsysModuleContext.vaId, &vaPrm, sizeof(vaPrm)); /* Video Encoder Link */ System_linkCreate(gVencModuleContext.encId, &encPrm, sizeof(encPrm)); /* VSTAB link */ System_linkCreate(vstabId, &vstabPrm, sizeof(vstabPrm)); /* IPC Bits Links */ System_linkCreate(gVencModuleContext.ipcBitsOutRTOSId, &ipcBitsOutVideoPrm, sizeof(ipcBitsOutVideoPrm)); System_linkCreate(gVencModuleContext.ipcBitsInHLOSId, &ipcBitsInHostPrm0, sizeof(ipcBitsInHostPrm0)); /* display link */ if(gIsDiplayToBeDisabled == 0) System_linkCreate(gVdisModuleContext.displayId[0], &displayPrm, sizeof(displayPrm)); System_linkCreate(gVdisModuleContext.displayId[VDIS_DEV_SD], &displayPrm_SD, sizeof(displayPrm_SD)); OSA_printf("USECASE SETUP DONE\n"); } /* =================================================================== * @func MultiCh_deleteTriStreamFullFtr * * @desc Function does the following * * @modif This function modifies the following structures * * @inputs This function takes the following inputs * <argument name> * Description of usage * <argument name> * Description of usage * * @outputs <argument name> * Description of usage * * @return Return value of this function if any * ================================================================== */ Void MultiCh_deleteTriStreamSmartAnalytics() { UInt32 ispId; UInt32 glbceId; UInt32 mergeId[NUM_MERGE_LINK]; UInt32 ipcOutVpssId; UInt32 ipcInVideoId; UInt32 dupId[NUM_DUP_LINK]; UInt32 ipcFramesOutVpssId; UInt32 ipcFramesInDspId; UInt32 vstabId; UInt32 glbceSupportId; mergeId[CAM_STREAM_MERGE_IDX] = SYSTEM_VPSS_LINK_ID_MERGE_0; dupId[DIS_DUP_IDX] = SYSTEM_VPSS_LINK_ID_DUP_0; dupId[MJPEG_DUP_LINK_IDX] = SYSTEM_VPSS_LINK_ID_DUP_1; dupId[SCALER_DUP_IDX] = SYSTEM_VPSS_LINK_ID_DUP_2; dupId[VA_DUP_IDX] = SYSTEM_VPSS_LINK_ID_DUP_3; gVcamModuleContext.sclrId = SYSTEM_LINK_ID_SCLR_INST_0; gVsysModuleContext.fdId = SYSTEM_LINK_ID_FD; gVsysModuleContext.swOsdId = SYSTEM_LINK_ID_SWOSD_0; ipcOutVpssId = SYSTEM_VPSS_LINK_ID_IPC_OUT_M3_0; ipcInVideoId = SYSTEM_VIDEO_LINK_ID_IPC_IN_M3_0; ipcFramesOutVpssId = SYSTEM_VPSS_LINK_ID_IPC_FRAMES_OUT_0; ipcFramesInDspId = SYSTEM_DSP_LINK_ID_IPC_FRAMES_IN_0; ispId = SYSTEM_LINK_ID_ISP_0; glbceId = SYSTEM_LINK_ID_GLBCE; vstabId = SYSTEM_LINK_ID_VSTAB_0; glbceSupportId = SYSTEM_LINK_ID_GLBCE_SUPPORT_0; /* Links Deletion in reverse order from sink to source */ /* display link */ if(gIsDiplayToBeDisabled == 0) System_linkDelete(gVdisModuleContext.displayId[0]); System_linkDelete(gVdisModuleContext.displayId[VDIS_DEV_SD]); /* IPC Bits Links */ System_linkDelete(gVencModuleContext.ipcBitsOutRTOSId); System_linkDelete(gVencModuleContext.ipcBitsInHLOSId); /* VSTAB Link */ System_linkDelete(vstabId); /* Video Encoder Link */ System_linkDelete(gVencModuleContext.encId); /* VA link */ System_linkDelete(gVsysModuleContext.vaId); /* IPC Links */ System_linkDelete(ipcOutVpssId); System_linkDelete(ipcInVideoId); /* IPC Frames Links */ System_linkDelete(ipcFramesOutVpssId); System_linkDelete(ipcFramesInDspId); /* FD Link */ System_linkDelete(gVsysModuleContext.fdId); /* Dup for VA link */ System_linkDelete(dupId[VA_DUP_IDX]); /* Scaler Link */ System_linkDelete(gVcamModuleContext.sclrId); /* SWOSD Link */ System_linkDelete(gVsysModuleContext.swOsdId); /* Merge Link */ System_linkDelete(mergeId[CAM_STREAM_MERGE_IDX]); /* Dup link for Scaler */ System_linkDelete(dupId[SCALER_DUP_IDX]); /* Dup Link */ System_linkDelete(dupId[MJPEG_DUP_LINK_IDX]); if (gUI_mcfw_config.noisefilterMode == DSS_NSF_ON) /* NSF Link */ System_linkDelete(gVcamModuleContext.nsfId); else /* VNF Link */ System_linkDelete(gVcamModuleContext.vnfId); /* dup link for display */ if(gIsDiplayToBeDisabled == 0) System_linkDelete(dupId[DIS_DUP_IDX]); gIsDiplayToBeDisabled = 0; if(gIsGlbceInitDone) { System_linkDelete(ispId); #ifdef YUV_M2M_DRV_TEST #else System_linkDelete(glbceId); System_linkDelete(glbceSupportId); #endif gIsGlbceInitDone = 0; } /* Camera Link */ System_linkDelete(gVcamModuleContext.cameraId); MultiCh_displayCtrlDeInit(&gVdisModuleContext.vdisConfig); /* Print the HWI, SWI and all tasks load */ /* Reset the accumulated timer ticks */ MultiCh_prfLoadCalcEnable(FALSE, TRUE, FALSE); System_deInit(); OSA_printf("USECASE TEARDOWN DONE\n"); }