I have a use case where in I need a single 1080p H.264 stream. Following is the use case diagram.
SENSOR
________||_______
| |
| CAMERA LINK |
|____(VPSSM3)____|
|
|
RSZA
(1920x1080)
(420SP)
|
___________|
|
DUP(VPSSM3)
(0)
| ------------ |
|
|
|
|
|
|
|
IPC OUT(VPSSM3)
|
|
IPC IN(VIDEOM3)
|
|
H264ENC(VIDEOM3)
|
|
IPC BITS OUT(VIDEOM3)
|
|
IPC BITS IN(A8)
|
|
*************
* STREAMING *
*************
However , this gives black frames upon dumping. Attached is the code.
I can get 2 streams after simple modification (1080p and 720p) without any problem. Request somebody to check this.
Best Regards
JK
/** ==================================================================
* @file multich_tristream_lowPower.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 + 1080p> ---------------------------
SENSOR
________||_______
| |
| CAMERA LINK |
|____(VPSSM3)____|
|
RSZA
(1920x1080)
(420SP)
|
___________|
|
DUP(VPSSM3)
(0)
| ------------ |
|
|
|
|
|
|
|
IPC OUT(VPSSM3)
|
|
IPC IN(VIDEOM3)
|
|
H264ENC(VIDEOM3)
|
|
IPC BITS OUT(VIDEOM3)
|
|
IPC BITS IN(A8)
|
|
*************
* STREAMING *
*************
------------------------------------------------------------------------------------------*/
#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"
extern UInt32 gIsGlbceInitDone;
extern UInt32 gIsDiplayToBeDisabled;
extern GlbcePreset gGLBCE_AlgoPreset;
/* =============================================================================
* 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
//#define MUX
/* Merge Link for camera streams */
#define NUM_MERGE_LINK (1)
#define CAM_STREAM_MERGE_IDX (0)
/* ===================================================================
* @func MultiCh_createTriStreamLowPwr
*
* @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 singleStream_create()
{
UInt32 i;
CameraLink_CreateParams cameraPrm;
IspLink_CreateParams ispPrm;
UInt32 ispId;
GlbceLink_CreateParams glbcePrm;
UInt32 glbceId;
MergeLink_CreateParams mergePrm[NUM_MERGE_LINK];
IpcLink_CreateParams ipcOutVpssPrm;
IpcLink_CreateParams ipcInVideoPrm;
EncLink_CreateParams encPrm;
DupLink_CreateParams dupPrm;
IpcBitsOutLinkRTOS_CreateParams ipcBitsOutVideoPrm;
IpcBitsInLinkHLOS_CreateParams ipcBitsInHostPrm0;
VstabLink_CreateParams vstabPrm;
GlbceSupportLink_CreateParams glbceSupportPrm;
CameraLink_VipInstParams *pCameraInstPrm;
CameraLink_OutParams *pCameraOutPrm;
UInt32 dupId;
#ifdef MUX
UInt32 muxId;
#endif
UInt32 ipcOutVpssId;
UInt32 ipcInVideoId;
// UInt32 swosdId;
UInt32 vstabId;
UInt32 glbceSupportId;
#ifdef WDR_ON
WdrLink_CreateParams wdrPrm;
UInt32 wdrId;
#endif
/* 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);
#ifdef MUX
MULTICH_INIT_STRUCT(MuxLink_CreateParams, muxPrm);
#endif
OSA_printf("\n********** LOW POWER USECASE ********\n");
OSA_printf
("********* Entered Tri Streaming 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;
dupId = SYSTEM_VPSS_LINK_ID_DUP_0;
gVsysModuleContext.swOsdId = SYSTEM_LINK_ID_SWOSD_0;
vstabId = SYSTEM_LINK_ID_VSTAB_0;
glbceSupportId = SYSTEM_LINK_ID_GLBCE_SUPPORT_0;
#ifdef WDR_ON
wdrId = SYSTEM_LINK_ID_WDR;
#endif
/* 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;
ispId = SYSTEM_LINK_ID_ISP_0;
glbceId = SYSTEM_LINK_ID_GLBCE;
OSA_printf("JK:gUI_mcfw_config.glbceEnable = %d \n ",gUI_mcfw_config.glbceEnable);//0
OSA_printf("JK:gUI_mcfw_config.demoCfg.resolution_combo = %d \n ",gUI_mcfw_config.demoCfg.resolution_combo);//0
{
/* Camera Link params */
CameraLink_CreateParams_Init(&cameraPrm);
cameraPrm.captureMode = CAMERA_LINK_CAPMODE_ISIF;
cameraPrm.outQueParams[0].nextLink = dupId;
//cameraPrm.outQueParams[1].nextLink = mergeId[CAM_STREAM_MERGE_IDX];
// gVcamModuleContext.glbceId = SYSTEM_LINK_ID_INVALID;
/* 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;
#ifdef ENABLE_TILER_CAMERA
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_UV;
#ifdef IMGS_OMNIVISION_OV10630
pCameraInstPrm->sensorOutWidth = 1280;
pCameraInstPrm->sensorOutHeight = 720;
#elif defined IMGS_MICRON_MT9M034
pCameraInstPrm->sensorOutWidth = 1280;
pCameraInstPrm->sensorOutHeight = 720;
#else
switch(gUI_mcfw_config.demoCfg.resolution_combo)
{
case RES_1080P_D1 : pCameraInstPrm->sensorOutWidth = 1920;
pCameraInstPrm->sensorOutHeight = 1080;
break;
case RES_1080P_1080P: pCameraInstPrm->sensorOutWidth = 1920;
pCameraInstPrm->sensorOutHeight = 1080;
break;
case RES_3MP_D1 : pCameraInstPrm->sensorOutWidth = 2048;
pCameraInstPrm->sensorOutHeight = 1536;
break;
case RES_5MP_D1 : pCameraInstPrm->sensorOutWidth = 2560;
pCameraInstPrm->sensorOutHeight = 1920;
break;
case RES_8MP_D1 : pCameraInstPrm->sensorOutWidth = 3264;
pCameraInstPrm->sensorOutHeight = 2448;
break;
case RES_10MP_D1 : pCameraInstPrm->sensorOutWidth = 3648;
pCameraInstPrm->sensorOutHeight = 2736;
break;
case RES_960P_D1 : pCameraInstPrm->sensorOutWidth = 1280;
pCameraInstPrm->sensorOutHeight = 960;
break;
default : pCameraInstPrm->sensorOutWidth = 1920;
pCameraInstPrm->sensorOutHeight = 1080;
break;
}
#endif
switch(gUI_mcfw_config.demoCfg.resolution_combo)
{
case RES_1080P_D1 : pCameraInstPrm->standard = SYSTEM_STD_1080P_60;
break;
case RES_1080P_1080P: pCameraInstPrm->standard = SYSTEM_STD_1080P_60;
break;
case RES_3MP_D1 : pCameraInstPrm->standard = SYSTEM_STD_3MP_2048_1536;
break;
case RES_5MP_D1 : pCameraInstPrm->standard = SYSTEM_STD_5MP_2560_1920;
break;
case RES_8MP_D1 : pCameraInstPrm->standard = SYSTEM_STD_8MP_3264_2448;
break;
case RES_10MP_D1 : pCameraInstPrm->standard = SYSTEM_STD_10MP_3648_2736;
break;
case RES_960P_D1 : pCameraInstPrm->standard = SYSTEM_STD_960P_30;
break;
default : pCameraInstPrm->standard = SYSTEM_STD_1080P_60;
break;
}
pCameraInstPrm->numOutput = 1;//2;
/* First stream */
pCameraOutPrm = &pCameraInstPrm->outParams[0];
pCameraOutPrm->dataFormat = SYSTEM_DF_YUV420SP_UV;
pCameraOutPrm->scEnable = FALSE;
#ifdef IMGS_OMNIVISION_OV10630
pCameraOutPrm->scOutWidth = 1280;
pCameraOutPrm->scOutHeight = 720;
#elif defined IMGS_MICRON_MT9M034
pCameraOutPrm->scOutWidth = 1280;
pCameraOutPrm->scOutHeight = 720;
#else
/* When VS is enabled then scOutWidth/scOutHeight cannot be equal to sensorOutWidth/sensorOutHeight */
if(cameraPrm.vsEnable == 0)
{
switch(gUI_mcfw_config.demoCfg.resolution_combo)
{
case RES_1080P_D1 : pCameraOutPrm->scOutWidth = 1920;
pCameraOutPrm->scOutHeight = 1080;
break;
case RES_1080P_1080P: pCameraOutPrm->scOutWidth = 1920;
pCameraOutPrm->scOutHeight = 1080;
break;
case RES_3MP_D1 : pCameraOutPrm->scOutWidth = 2048;
pCameraOutPrm->scOutHeight = 1536;
break;
case RES_5MP_D1 : pCameraOutPrm->scOutWidth = 2560;
pCameraOutPrm->scOutHeight = 1920;
break;
case RES_8MP_D1 : pCameraOutPrm->scOutWidth = 3264;
pCameraOutPrm->scOutHeight = 2448;
break;
case RES_10MP_D1 : pCameraOutPrm->scOutWidth = 3648;
pCameraOutPrm->scOutHeight = 2736;
break;
case RES_960P_D1 : pCameraOutPrm->scOutWidth = 1280;
pCameraOutPrm->scOutHeight = 960;
break;
default : pCameraOutPrm->scOutWidth = 1920;
pCameraOutPrm->scOutHeight = 1080;
break;
}
}
else
{
pCameraOutPrm->scOutWidth = 1600;
pCameraOutPrm->scOutHeight = 900;
}
#endif
pCameraOutPrm->outQueId = 0;
/* Second stream */
/* pCameraOutPrm = &pCameraInstPrm->outParams[1];
pCameraOutPrm->dataFormat = SYSTEM_DF_YUV420SP_UV;
pCameraOutPrm->scEnable = FALSE;
pCameraOutPrm->scOutWidth = 1280;//720;
pCameraOutPrm->scOutHeight =720;// 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;
OSA_printf("JK:gUI_mcfw_config.glbceEnable = %d \n ",gUI_mcfw_config.glbceEnable);//0
dupPrm.inQueParams.prevLinkId = gVcamModuleContext.cameraId;
dupPrm.inQueParams.prevLinkQueId = 0;
dupPrm.numOutQue = 1;//2;
dupPrm.outQueParams[0].nextLink = ipcOutVpssId;//mergeId[CAM_STREAM_MERGE_IDX];
//dupPrm.outQueParams[1].nextLink = mergeId[CAM_STREAM_MERGE_IDX];
dupPrm.notifyNextLink = TRUE;
#endif
#if 0
/* SWOSD Link Params */
swosdPrm.inQueParams.prevLinkId = mergeId[CAM_STREAM_MERGE_IDX];
swosdPrm.inQueParams.prevLinkQueId = 0;
swosdPrm.outQueParams.nextLink = ipcOutVpssId;
#endif
/* IPC Out VPSS link params */
ipcOutVpssPrm.inQueParams.prevLinkId = dupId;
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++)//VENC_PRIMARY_CHANNELS = 1
{
pLinkChPrm = &encPrm.chCreateParams[i];
pLinkDynPrm = &pLinkChPrm->defaultDynamicParams;
pChPrm = &gVencModuleContext.vencConfig.encChannelParams[i];
pDynPrm = &pChPrm->dynamicParam;
pLinkChPrm->format = IVIDEO_H264HP; //"SINGLE_H264"
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;
if ((gUI_mcfw_config.demoCfg.resolution_combo == RES_10MP_D1) && (i == 0))
{
encPrm.numBufPerCh[i] = 2;
}
else if ((gUI_mcfw_config.demoCfg.resolution_combo == RES_8MP_D1) && (i == 0))
{
encPrm.numBufPerCh[i] = 3;
}
else
{
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;
//encPrm.chCreateParams[1].defaultDynamicParams.inputFrameRate = 5;
encPrm.vsEnable = 0;//gUI_mcfw_config.vsEnable;
OSA_printf("JK:encPrm.vsEnable = %d \n ",encPrm.vsEnable);//0
encPrm.isVaUseCase = 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);
/* 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)
{
#ifndef WDR_ON
System_linkCreate(glbceSupportId, &glbceSupportPrm,sizeof(glbceSupportPrm));
/* glbce link create */
System_linkCreate(glbceId, &glbcePrm,sizeof(glbcePrm));
#else
System_linkCreate(wdrId, &wdrPrm,sizeof(wdrPrm));
#endif
/* cam pp link create */
System_linkCreate(ispId, &ispPrm,sizeof(ispPrm));
gIsGlbceInitDone = 1;
}
else
{
gIsGlbceInitDone = 0;
}
/* Dup Link */
System_linkCreate(dupId, &dupPrm, sizeof(dupPrm));
/* IPC Links */
System_linkCreate(ipcOutVpssId, &ipcOutVpssPrm, sizeof(ipcOutVpssPrm));
System_linkCreate(ipcInVideoId, &ipcInVideoPrm, sizeof(ipcInVideoPrm));
/* 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));
OSA_printf("USECASE SETUP DONE\n");
}
/* ===================================================================
* @func MultiCh_deleteTriStreamLowPwr
*
* @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 single_stream_delete()
{
UInt32 ispId;
UInt32 glbceId;
UInt32 dupId;
UInt32 ipcOutVpssId;
UInt32 ipcInVideoId;
UInt32 vstabId;
UInt32 glbceSupportId;
#ifdef WDR_ON
UInt32 wdrId;
#endif
dupId = SYSTEM_VPSS_LINK_ID_DUP_0;
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;
ispId = SYSTEM_LINK_ID_ISP_0;
glbceId = SYSTEM_LINK_ID_GLBCE;
vstabId = SYSTEM_LINK_ID_VSTAB_0;
glbceSupportId = SYSTEM_LINK_ID_GLBCE_SUPPORT_0;
#ifdef WDR_ON
wdrId = SYSTEM_LINK_ID_WDR;
#endif
/* Deleting the links in order of sink to source */
System_linkDelete(gVencModuleContext.ipcBitsOutRTOSId);
System_linkDelete(gVencModuleContext.ipcBitsInHLOSId);
/* VSTAB Link */
System_linkDelete(vstabId);
System_linkDelete(gVencModuleContext.encId);
System_linkDelete(ipcOutVpssId);
System_linkDelete(ipcInVideoId);
System_linkDelete(dupId);
if(gIsGlbceInitDone)
{
#ifndef WDR_ON
System_linkDelete(glbceId);
System_linkDelete(glbceSupportId);
#else
System_linkDelete(wdrId);
#endif
System_linkDelete(ispId);
gIsGlbceInitDone = 0;
}
else
OSA_printf("We come here to leave for the day\n");
System_linkDelete(gVcamModuleContext.cameraId);
/* SWOSD Link */
System_linkDelete(gVsysModuleContext.swOsdId);
/* Print the HWI, SWI and all tasks load */
/* Reset the accumulated timer ticks */
MultiCh_prfLoadCalcEnable(FALSE, TRUE, FALSE);
OSA_printf("USECASE TEARDOWN DONE\n");
}