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.

Single 1080p stream on IPNC RDK

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