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.

IPNC_RDK 3.5 TVP5158 Deinterlacer Support

Other Parts Discussed in Thread: DM385, TVP5158

Hi All,

We are using DM385 custom board with IPNC_RDK 3.5.

We have four camera.(AR0330 + TVP5158 3CH(1ch we are skipping)).

My usecase_1 flow 

camera(1080x1920 @30fps)  - > display scalar(720x480) - > 

- > merge  - > swms - > Display           

     capture (D1 3CH) - > NF - > 

My usecase_2 flow 

camera(1080x1920 @30fps)  - > display scalar(720x480) - > 

- > merge  - > swms - > Display           

     capture (D1 3CH) -> DEI - > NF - > 

Both the usecase we got same tvp5158 output(seems image not de-interlaced).?

Below i attached my usecase_1 and usecase_2.

/** ==================================================================
 *  @file   multich_Stream_CaptureDisplay.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
 * ===================================================================*/

#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"

UInt32 gDispSclrId ;
/* =============================================================================
 * Use case code
 * ============================================================================= */
static SystemVideo_Ivahd2ChMap_Tbl systemVid_encDecIvaChMapTbl = {
    .isPopulated = 1,
    .ivaMap[0] = {
        .EncNumCh = 2,
        .EncChList = {0, 1},
        .DecNumCh = 2,
        .DecChList = {0, 1},
    },

};
/* Merge Link for camera streams */
#define NUM_MERGE_LINK         (1) 
#define NUM_DUP_LINK           (3)
#define HDMIDIS_DUP_IDX        (0)
#define RAW_DUP_IDX            (2)
#define CAM_STREAM_MERGE_IDX        (0)

//#define DEI_OUT_MAIN_STRAMER    (DEI_LINK_OUT_QUE_DEI_SC) // (DEI_LINK_OUT_QUE_VIP_SC // YUV422I WB0/1
//#define DEI_OUT_SUB_STRAMER     (DEI_LINK_OUT_QUE_DEI_SC) // (DEI_LINK_OUT_QUE_VIP_SC)

/* ===================================================================
 *  @func     MultiCh_createStreamCaptureDisplay
 *
 *  @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_AR0330_tvp5158_CaptureDisplay_mosaic()
{
    OSA_printf("\n ### MultiCh_AR0330_tvp5158_CaptureDisplay_mosaic ***\n\n");
    //UInt32 chId;
    UInt32 mergeId[NUM_MERGE_LINK];

    CameraLink_VipInstParams *pCameraInstPrm;
    CameraLink_OutParams *pCameraOutPrm;
    CameraLink_CreateParams cameraPrm;
    SclrLink_CreateParams disp_sclrPrm;

    CaptureLink_CreateParams capturePrm;
    CaptureLink_VipInstParams *pCaptureInstPrm;
    CaptureLink_OutParams *pCaptureOutPrm;

    NsfLink_CreateParams nsfPrm;
    MergeLink_CreateParams mergePrm[NUM_MERGE_LINK];
    SwMsLink_CreateParams swMsPrm;
    DisplayLink_CreateParams displayPrm;
    //DeiLink_CreateParams deiPrm ;

    MultiCh_detectBoard();

    //MULTICH_INIT_STRUCT(DeiLink_CreateParams, deiPrm);

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

    gVcamModuleContext.cameraId = SYSTEM_LINK_ID_CAMERA;
    gVcamModuleContext.sclrId[0] = SYSTEM_LINK_ID_SCLR_INST_0;

    gVcapModuleContext.nsfId[0]     = SYSTEM_LINK_ID_NSF_0;
    //gVcapModuleContext.deiId[0]     = SYSTEM_LINK_ID_DEI_0;

    gVcapModuleContext.captureId = SYSTEM_LINK_ID_CAPTURE;
    gVdisModuleContext.swMsId[0] = SYSTEM_LINK_ID_SW_MS_MULTI_INST_0;
    gVdisModuleContext.displayId[VDIS_DEV_SD] = SYSTEM_LINK_ID_DISPLAY_2;
    gDispSclrId = SYSTEM_LINK_ID_SCLR_INST_2 ;
    //gDeiId = SYSTEM_LINK_ID_DEI_0;// SYSTEM_LINK_ID_DEI_HQ_1;

    /* Camera Link params */
    gVcamModuleContext.glbceId = SYSTEM_LINK_ID_INVALID;
    CameraLink_CreateParams_Init(&cameraPrm);
    cameraPrm.captureMode = CAMERA_LINK_CAPMODE_ISIF;

    /* This is for TVP5158 Audio Channels audio channels connected in cascade */
    cameraPrm.numAudioChannels = 0;
    cameraPrm.numVipInst = 1;
    cameraPrm.tilerEnable = FALSE;
    cameraPrm.vsEnable = 0;

    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;
    pCameraInstPrm->sensorOutWidth  = 1920;
    pCameraInstPrm->sensorOutHeight = 1080;
    pCameraInstPrm->numOutput = 1;
    pCameraInstPrm->standard = SYSTEM_STD_1080P_30;
    cameraPrm.issVnfEnable = 1;

    /* First stream */
    pCameraOutPrm = &pCameraInstPrm->outParams[0];
    pCameraOutPrm->dataFormat = SYSTEM_DF_YUV420SP_UV; 		
    pCameraOutPrm->scEnable = FALSE;
    pCameraOutPrm->scOutWidth = 1920;
    pCameraOutPrm->scOutHeight = 1080;
    pCameraOutPrm->outQueId = 0;
    cameraPrm.vnfFullResolution = FALSE;
    cameraPrm.vnfLinkId = SYSTEM_LINK_ID_INVALID;

    /* 2A config */
    cameraPrm.t2aConfig.n2A_vendor = gUI_mcfw_config.n2A_vendor;
    cameraPrm.t2aConfig.n2A_mode = gUI_mcfw_config.n2A_mode;

    cameraPrm.outQueParams[0].nextLink  =  SYSTEM_LINK_ID_SCLR_INST_0 ;

    /*Display Scaler Configration*/
    SclrLink_CreateParams_Init(&disp_sclrPrm);
    disp_sclrPrm.inQueParams.prevLinkId             = gVcamModuleContext.cameraId; 
    disp_sclrPrm.inQueParams.prevLinkQueId          = 0;
    disp_sclrPrm.tilerEnable                        = FALSE;
    disp_sclrPrm.enableLineSkipSc                   = FALSE;
    disp_sclrPrm.inputFrameRate                     = 30;
    disp_sclrPrm.outputFrameRate                    = 30;
    disp_sclrPrm.scaleMode                          = DEI_SCALE_MODE_ABSOLUTE;
    disp_sclrPrm.outScaleFactor.absoluteResolution.outWidth   = 720;
    disp_sclrPrm.outScaleFactor.absoluteResolution.outHeight  = 480;
    disp_sclrPrm.outDataFormat = VF_YUV422I_YUYV;
    disp_sclrPrm.pathId = SCLR_LINK_SEC0_SC3;

    disp_sclrPrm.outQueParams.nextLink              = SYSTEM_VPSS_LINK_ID_MERGE_1;  

    /* Capture Link params */
    CaptureLink_CreateParams_Init(&capturePrm);
    capturePrm.numVipInst		    = 1;
    capturePrm.tilerEnable		    = FALSE;
    capturePrm.numBufsPerCh		    = 8;

    capturePrm.fakeHdMode                 = FALSE;
    capturePrm.enableSdCrop               = FALSE;
    capturePrm.doCropInCapture            = FALSE;

    pCaptureInstPrm                     = &capturePrm.vipInst[0];
    pCaptureInstPrm->vipInstId          = SYSTEM_CAPTURE_INST_VIP1_PORTA; //set capture port ID
    pCaptureInstPrm->videoDecoderId     = SYSTEM_DEVICE_VID_DEC_TVP5158_DRV; //set capture external device ID
    pCaptureInstPrm->standard           = SYSTEM_STD_MUX_4CH_D1; //set capture video standard as 4CH multiplxed D1 capture
    pCaptureInstPrm->numOutput          = 1; //number of output per channel for a port
    pCaptureInstPrm->inDataFormat       = SYSTEM_DF_YUV422P; //set input data format as 16-bit YUV422
    pCaptureOutPrm                      = &pCaptureInstPrm->outParams[0];

    pCaptureOutPrm->dataFormat          = SYSTEM_DF_YUV422I_YUYV; //output data format is YUV422I
    pCaptureOutPrm->scEnable            = FALSE; //inline scaling disabled since this is multi-channel capture
    pCaptureOutPrm->scOutWidth          = 0;
    pCaptureOutPrm->scOutHeight         = 0;
    pCaptureOutPrm->outQueId            = 0;

    capturePrm.outQueParams[0].nextLink =  gVcapModuleContext.nsfId[0] ; 

#if 0
    /*DEI*/
    deiPrm.inQueParams.prevLinkId = gVcapModuleContext.captureId ; // CVBS_DISP
    deiPrm.inQueParams.prevLinkQueId  = 0 ;
    deiPrm.enableLineSkipSc = FALSE ;
    deiPrm.enableDeiForceBypass = FALSE;//TRUE ; //Input is progressive TRUE
    deiPrm.inputDeiFrameRate = 60;
    deiPrm.outputDeiFrameRate = 30;//FS:RAJ///60;
    deiPrm.outQueParams[DEI_OUT_SUB_STRAMER].nextLink =  gVcapModuleContext.nsfId[0] ;

    deiPrm.enableOut[DEI_OUT_SUB_STRAMER] = TRUE;
    deiPrm.comprEnable = FALSE;
    deiPrm.setVipScYuv422Format = FALSE;    // FALSE->yuv420sp,  TRUE->yuv422i //From DEI o/p to 422I
    deiPrm.inputFrameRate[DEI_OUT_SUB_STRAMER] = 60;
    deiPrm.outputFrameRate[DEI_OUT_SUB_STRAMER] = 60;

    deiPrm.outScaleFactor[DEI_OUT_SUB_STRAMER][0].scaleMode = DEI_SCALE_MODE_ABSOLUTE;
    deiPrm.outScaleFactor[DEI_OUT_SUB_STRAMER][0].absoluteResolution.outWidth  = 720;
    deiPrm.outScaleFactor[DEI_OUT_SUB_STRAMER][0].absoluteResolution.outHeight = 480;
    for (chId=1; chId < DEI_LINK_MAX_CH; chId++)
        deiPrm.outScaleFactor[DEI_OUT_SUB_STRAMER][chId] = deiPrm.outScaleFactor[DEI_OUT_SUB_STRAMER][0];
#endif

    /* Noise filter*/
    NsfLink_CreateParams_Init(&nsfPrm);
    nsfPrm.bypassNsf                        = TRUE;
    nsfPrm.tilerEnable                      = FALSE;
    nsfPrm.inQueParams.prevLinkId           = gVcapModuleContext.captureId;//gDeiId;
    nsfPrm.inQueParams.prevLinkQueId        = 0;
    nsfPrm.numOutQue                        = 1;
    nsfPrm.numBufsPerCh                     = 5;//FS:RAJ //3;
    nsfPrm.nsfStrength = gUI_mcfw_config.vnfStrength;

    nsfPrm.outQueParams[0].nextLink         = SYSTEM_VPSS_LINK_ID_MERGE_1 ;

    /* Merge Link params */
    mergePrm[CAM_STREAM_MERGE_IDX].numInQue = 2;
    mergePrm[CAM_STREAM_MERGE_IDX].inQueParams[0].prevLinkId =  SYSTEM_LINK_ID_SCLR_INST_0;
    mergePrm[CAM_STREAM_MERGE_IDX].inQueParams[0].prevLinkQueId = 0;

    mergePrm[CAM_STREAM_MERGE_IDX].inQueParams[1].prevLinkId =  gVcapModuleContext.nsfId[0];
    mergePrm[CAM_STREAM_MERGE_IDX].inQueParams[1].prevLinkQueId = 0;

    mergePrm[CAM_STREAM_MERGE_IDX].outQueParams.nextLink = gVdisModuleContext.swMsId[0] ;
    mergePrm[CAM_STREAM_MERGE_IDX].notifyNextLink = TRUE;

    /* SW MS Link */
    SwMsLink_CreateParams_Init(&swMsPrm);
    swMsPrm.numSwMsInst               = 1;
    swMsPrm.swMsInstId[0]             = SYSTEM_SW_MS_SC_INST_VIP0_SC;
    swMsPrm.inQueParams.prevLinkId    = SYSTEM_VPSS_LINK_ID_MERGE_1;
    swMsPrm.inQueParams.prevLinkQueId = 0;
    swMsPrm.maxInputQueLen            = 4;
    swMsPrm.maxOutRes                 = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_SD].resolution;
    swMsPrm.lineSkipMode              = FALSE;
    swMsPrm.enableLayoutGridDraw      = FALSE;
    swMsPrm.enableProcessTieWithDisplay = FALSE;

    swMsPrm.outQueParams.nextLink     = gVdisModuleContext.displayId[VDIS_DEV_SD];

    MultiCh_swMsGetDefaultLayoutPrm(SYSTEM_DC_VENC_SD,&swMsPrm,FALSE);

    /* display link params */
    MULTICH_INIT_STRUCT(DisplayLink_CreateParams,displayPrm);
    displayPrm.inQueParams[0].prevLinkId =  gVdisModuleContext.swMsId[0];
    displayPrm.inQueParams[0].prevLinkQueId = 0;
    displayPrm.displayRes = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_SD].resolution;
    displayPrm.displayId  = DISPLAY_LINK_DISPLAY_SD ;  // CVBS

    /*System linkCreate order */
    System_linkCreate(gVcamModuleContext.cameraId, &cameraPrm, sizeof(cameraPrm));
    System_linkControl(gVcamModuleContext.cameraId, CAMERA_LINK_CMD_DETECT_VIDEO, NULL, 0, TRUE);

    System_linkCreate( SYSTEM_LINK_ID_SCLR_INST_0 , &disp_sclrPrm, sizeof(disp_sclrPrm));  

    System_linkCreate( gVcapModuleContext.captureId, &capturePrm,  sizeof(capturePrm));

    //System_linkCreate(gDeiId,&deiPrm,sizeof(DeiLink_CreateParams));

    System_linkCreate( gVcapModuleContext.nsfId[0] , &nsfPrm, sizeof(NsfLink_CreateParams));  

    System_linkCreate( SYSTEM_VPSS_LINK_ID_MERGE_1 , &mergePrm[CAM_STREAM_MERGE_IDX], sizeof(mergePrm[CAM_STREAM_MERGE_IDX]));

    System_linkCreate(gVdisModuleContext.swMsId[0],&swMsPrm,sizeof(swMsPrm));

    System_linkCreate(gVdisModuleContext.displayId[VDIS_DEV_SD], &displayPrm,sizeof(displayPrm));

    OSA_printf("USECASE SETUP DONE\n");
}

/* ===================================================================
 *  @func     MultiCh_deleteStreamCaptureDisplay
 *
 *  @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_deleteStreamCaptureDisplay()
Void MultiCh_delete_AR0330_tvp5158_CaptureDisplay_mosaic()
{
	UInt32 MergeId[NUM_MERGE_LINK];

	MergeId[CAM_STREAM_MERGE_IDX] = SYSTEM_VPSS_LINK_ID_MERGE_0;
	/* display link */
	System_linkDelete(gVdisModuleContext.displayId[VDIS_DEV_SD]);

	/* Merge Link */
	System_linkDelete(MergeId[CAM_STREAM_MERGE_IDX]);

	//AV support start
#if 0
	if( Av_scalerId != SYSTEM_LINK_ID_INVALID )
	{
		System_linkDelete(Av_scalerId);
		Av_scalerId = SYSTEM_LINK_ID_INVALID ;
	}
#endif
	//AV support End

	/* Camera Link */
	System_linkDelete(gVcapModuleContext.captureId);
	/* Print the HWI, SWI and all tasks load */
	/* Reset the accumulated timer ticks */
	MultiCh_prfLoadCalcEnable(FALSE, TRUE, FALSE);

	OSA_printf("USECASE TEARDOWN DONE\n");
}

/** ==================================================================
 *  @file   multich_Stream_CaptureDisplay.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
 * ===================================================================*/

#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"

UInt32 gDispSclrId ;
/* =============================================================================
 * Use case code
 * ============================================================================= */
static SystemVideo_Ivahd2ChMap_Tbl systemVid_encDecIvaChMapTbl = {
    .isPopulated = 1,
    .ivaMap[0] = {
        .EncNumCh = 2,
        .EncChList = {0, 1},
        .DecNumCh = 2,
        .DecChList = {0, 1},
    },

};
/* Merge Link for camera streams */
#define NUM_MERGE_LINK         (1) 
#define NUM_DUP_LINK           (3)
#define HDMIDIS_DUP_IDX        (0)
#define RAW_DUP_IDX            (2)
#define CAM_STREAM_MERGE_IDX        (0)

#define DEI_OUT_SUB_STRAMER     (DEI_LINK_OUT_QUE_DEI_SC) // (DEI_LINK_OUT_QUE_VIP_SC)

/* ===================================================================
 *  @func     MultiCh_createStreamCaptureDisplay
 *
 *  @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_AR0330_tvp5158_CaptureDisplay_mosaic()
{
    OSA_printf("\n ### MultiCh_AR0330_tvp5158_CaptureDisplay_mosaic ***\n\n");
    UInt32 chId;
    UInt32 mergeId[NUM_MERGE_LINK];

    CameraLink_VipInstParams *pCameraInstPrm;
    CameraLink_OutParams *pCameraOutPrm;
    CameraLink_CreateParams cameraPrm;
    SclrLink_CreateParams disp_sclrPrm;

    CaptureLink_CreateParams capturePrm;
    CaptureLink_VipInstParams *pCaptureInstPrm;
    CaptureLink_OutParams *pCaptureOutPrm;

    NsfLink_CreateParams nsfPrm;
    MergeLink_CreateParams mergePrm[NUM_MERGE_LINK];
    SwMsLink_CreateParams swMsPrm;
    DisplayLink_CreateParams displayPrm;
    DeiLink_CreateParams deiPrm;

    MultiCh_detectBoard();

    //MULTICH_INIT_STRUCT(DeiLink_CreateParams, deiPrm);

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

    gVcamModuleContext.cameraId = SYSTEM_LINK_ID_CAMERA;
    gVcamModuleContext.sclrId[0] = SYSTEM_LINK_ID_SCLR_INST_0;

    gVcapModuleContext.nsfId[0] = SYSTEM_LINK_ID_NSF_0;
    gVcapModuleContext.deiId[0] = SYSTEM_LINK_ID_DEI_0;//SYSTEM_LINK_ID_DEI_HQ_1

    gVcapModuleContext.captureId = SYSTEM_LINK_ID_CAPTURE;
    gVdisModuleContext.swMsId[0] = SYSTEM_LINK_ID_SW_MS_MULTI_INST_0;
    gVdisModuleContext.displayId[VDIS_DEV_SD] = SYSTEM_LINK_ID_DISPLAY_2;
    gDispSclrId = SYSTEM_LINK_ID_SCLR_INST_2 ;

    /* Camera Link params */
    gVcamModuleContext.glbceId = SYSTEM_LINK_ID_INVALID;
    CameraLink_CreateParams_Init(&cameraPrm);
    cameraPrm.captureMode = CAMERA_LINK_CAPMODE_ISIF;

    /* This is for TVP5158 Audio Channels audio channels connected in cascade */
    cameraPrm.numAudioChannels = 0;
    cameraPrm.numVipInst = 1;
    cameraPrm.tilerEnable = FALSE;
    cameraPrm.vsEnable = 0;

    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;
    pCameraInstPrm->sensorOutWidth  = 1920;
    pCameraInstPrm->sensorOutHeight = 1080;
    pCameraInstPrm->numOutput = 1;
    pCameraInstPrm->standard = SYSTEM_STD_1080P_30;
    cameraPrm.issVnfEnable = 1;

    /* First stream */
    pCameraOutPrm = &pCameraInstPrm->outParams[0];
    pCameraOutPrm->dataFormat = SYSTEM_DF_YUV420SP_UV; 		
    pCameraOutPrm->scEnable = FALSE;
    pCameraOutPrm->scOutWidth = 1920;
    pCameraOutPrm->scOutHeight = 1080;
    pCameraOutPrm->outQueId = 0;
    cameraPrm.vnfFullResolution = FALSE;
    cameraPrm.vnfLinkId = SYSTEM_LINK_ID_INVALID;

    /* 2A config */
    cameraPrm.t2aConfig.n2A_vendor = gUI_mcfw_config.n2A_vendor;
    cameraPrm.t2aConfig.n2A_mode = gUI_mcfw_config.n2A_mode;

    cameraPrm.outQueParams[0].nextLink  =  SYSTEM_LINK_ID_SCLR_INST_0;

    /*Display Scaler Configration*/
    SclrLink_CreateParams_Init(&disp_sclrPrm);
    disp_sclrPrm.inQueParams.prevLinkId             = gVcamModuleContext.cameraId; 
    disp_sclrPrm.inQueParams.prevLinkQueId          = 0;
    disp_sclrPrm.tilerEnable                        = FALSE;
    disp_sclrPrm.enableLineSkipSc                   = FALSE;
    disp_sclrPrm.inputFrameRate                     = 30;
    disp_sclrPrm.outputFrameRate                    = 30;
    disp_sclrPrm.scaleMode                          = DEI_SCALE_MODE_ABSOLUTE;
    disp_sclrPrm.outScaleFactor.absoluteResolution.outWidth   = 720;
    disp_sclrPrm.outScaleFactor.absoluteResolution.outHeight  = 480;
    disp_sclrPrm.outDataFormat = VF_YUV422I_YUYV;
    disp_sclrPrm.pathId = SCLR_LINK_SEC0_SC3;

    disp_sclrPrm.outQueParams.nextLink = SYSTEM_VPSS_LINK_ID_MERGE_1;  

    /* Capture Link params */
    CaptureLink_CreateParams_Init(&capturePrm);
    capturePrm.numVipInst	    = 1;
    capturePrm.tilerEnable	    = FALSE;
    capturePrm.numBufsPerCh	    = 8;

    capturePrm.fakeHdMode           = FALSE;
    capturePrm.enableSdCrop         = FALSE;
    capturePrm.doCropInCapture      = FALSE;

    pCaptureInstPrm                     = &capturePrm.vipInst[0];
    pCaptureInstPrm->vipInstId          = SYSTEM_CAPTURE_INST_VIP1_PORTA; //set capture port ID
    pCaptureInstPrm->videoDecoderId     = SYSTEM_DEVICE_VID_DEC_TVP5158_DRV; //set capture external device ID
    pCaptureInstPrm->standard           = SYSTEM_STD_MUX_4CH_D1; //set capture video standard as 4CH multiplxed D1 capture
    pCaptureInstPrm->numOutput          = 1; //number of output per channel for a port
    pCaptureInstPrm->inDataFormat       = SYSTEM_DF_YUV422P; //set input data format as 16-bit YUV422
    pCaptureOutPrm                      = &pCaptureInstPrm->outParams[0];

    pCaptureOutPrm->dataFormat          = SYSTEM_DF_YUV422I_YUYV; //output data format is YUV422I
    pCaptureOutPrm->scEnable            = FALSE; //inline scaling disabled since this is multi-channel capture
    pCaptureOutPrm->scOutWidth          = 0;
    pCaptureOutPrm->scOutHeight         = 0;
    pCaptureOutPrm->outQueId            = 0;

    capturePrm.outQueParams[0].nextLink =  gVcapModuleContext.deiId[0];//gVcapModuleContext.nsfId[0] ; 

    /*DEI*/
    DeiLink_CreateParams_Init(&deiPrm);
    deiPrm.inQueParams.prevLinkId = gVcapModuleContext.captureId; // CVBS_DISP
    deiPrm.inQueParams.prevLinkQueId  = 0;
    deiPrm.enableLineSkipSc = FALSE;
    deiPrm.enableDeiForceBypass = FALSE;//TRUE ; //Input is progressive TRUE
    deiPrm.inputDeiFrameRate = 30;
    deiPrm.outputDeiFrameRate = 30;
    deiPrm.outQueParams[DEI_OUT_SUB_STRAMER].nextLink =  gVcapModuleContext.nsfId[0] ;

    deiPrm.enableOut[DEI_OUT_SUB_STRAMER] = TRUE;
    deiPrm.comprEnable = FALSE;
    deiPrm.tilerEnable = FALSE;
    deiPrm.setVipScYuv422Format = FALSE;    // FALSE->yuv420sp,  TRUE->yuv422i //From DEI o/p to 422I
    deiPrm.inputFrameRate[DEI_OUT_SUB_STRAMER] = 60;
    deiPrm.outputFrameRate[DEI_OUT_SUB_STRAMER] = 30;

    for (chId=0; chId < DEI_LINK_MAX_CH; chId++)
    {
        deiPrm.outScaleFactor[DEI_OUT_SUB_STRAMER][chId].scaleMode = DEI_SCALE_MODE_RATIO;
        deiPrm.outScaleFactor[DEI_OUT_SUB_STRAMER][chId].ratio.widthRatio.numerator = 1;
        deiPrm.outScaleFactor[DEI_OUT_SUB_STRAMER][chId].ratio.widthRatio.denominator = 1;
        deiPrm.outScaleFactor[DEI_OUT_SUB_STRAMER][chId].ratio.heightRatio.numerator = 1;
        deiPrm.outScaleFactor[DEI_OUT_SUB_STRAMER][chId].ratio.heightRatio.denominator = 1;
    }

    /* Noise filter*/
    NsfLink_CreateParams_Init(&nsfPrm);
    nsfPrm.bypassNsf                        = TRUE;
    nsfPrm.tilerEnable                      = FALSE;
    nsfPrm.inQueParams.prevLinkId           = gVcapModuleContext.deiId[0];//gVcapModuleContext.captureId;
    nsfPrm.inQueParams.prevLinkQueId        = 0;
    nsfPrm.numOutQue                        = 1;
    nsfPrm.numBufsPerCh                     = 5;
    nsfPrm.nsfStrength = gUI_mcfw_config.vnfStrength;

    nsfPrm.outQueParams[0].nextLink         = SYSTEM_VPSS_LINK_ID_MERGE_1 ;

    /* Merge Link params */
    mergePrm[CAM_STREAM_MERGE_IDX].numInQue = 2;
    mergePrm[CAM_STREAM_MERGE_IDX].inQueParams[0].prevLinkId =  SYSTEM_LINK_ID_SCLR_INST_0;
    mergePrm[CAM_STREAM_MERGE_IDX].inQueParams[0].prevLinkQueId = 0;

    mergePrm[CAM_STREAM_MERGE_IDX].inQueParams[1].prevLinkId =  gVcapModuleContext.nsfId[0];
    mergePrm[CAM_STREAM_MERGE_IDX].inQueParams[1].prevLinkQueId = 0;

    mergePrm[CAM_STREAM_MERGE_IDX].outQueParams.nextLink = gVdisModuleContext.swMsId[0] ;
    mergePrm[CAM_STREAM_MERGE_IDX].notifyNextLink = TRUE;

    /* SW MS Link */
    SwMsLink_CreateParams_Init(&swMsPrm);
    swMsPrm.numSwMsInst               = 1;
    swMsPrm.swMsInstId[0]             = SYSTEM_SW_MS_SC_INST_VIP0_SC;
    swMsPrm.inQueParams.prevLinkId    = SYSTEM_VPSS_LINK_ID_MERGE_1;
    swMsPrm.inQueParams.prevLinkQueId = 0;
    swMsPrm.maxInputQueLen            = 4;
    swMsPrm.maxOutRes                 = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_SD].resolution;
    swMsPrm.lineSkipMode              = FALSE;
    swMsPrm.enableLayoutGridDraw      = FALSE;
    swMsPrm.enableProcessTieWithDisplay = FALSE;

    swMsPrm.outQueParams.nextLink     = gVdisModuleContext.displayId[VDIS_DEV_SD];

    MultiCh_swMsGetDefaultLayoutPrm(SYSTEM_DC_VENC_SD,&swMsPrm,FALSE);

    /* display link params */
    MULTICH_INIT_STRUCT(DisplayLink_CreateParams,displayPrm);
    displayPrm.inQueParams[0].prevLinkId =  gVdisModuleContext.swMsId[0];
    displayPrm.inQueParams[0].prevLinkQueId = 0;
    displayPrm.displayRes = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_SD].resolution;
    displayPrm.displayId  = DISPLAY_LINK_DISPLAY_SD ;  // CVBS

    /*System linkCreate order */
    System_linkCreate(gVcamModuleContext.cameraId, &cameraPrm, sizeof(cameraPrm));
    System_linkControl(gVcamModuleContext.cameraId, CAMERA_LINK_CMD_DETECT_VIDEO, NULL, 0, TRUE);

    System_linkCreate( SYSTEM_LINK_ID_SCLR_INST_0 , &disp_sclrPrm, sizeof(disp_sclrPrm));  

    System_linkCreate( gVcapModuleContext.captureId, &capturePrm,  sizeof(capturePrm));

    System_linkCreate(gVcapModuleContext.deiId[0],&deiPrm,sizeof(DeiLink_CreateParams));

    System_linkCreate( gVcapModuleContext.nsfId[0] , &nsfPrm, sizeof(NsfLink_CreateParams));  

    System_linkCreate( SYSTEM_VPSS_LINK_ID_MERGE_1 , &mergePrm[CAM_STREAM_MERGE_IDX], sizeof(mergePrm[CAM_STREAM_MERGE_IDX]));

    System_linkCreate(gVdisModuleContext.swMsId[0],&swMsPrm,sizeof(swMsPrm));

    System_linkCreate(gVdisModuleContext.displayId[VDIS_DEV_SD], &displayPrm,sizeof(displayPrm));

    OSA_printf("USECASE SETUP DONE\n");
}

/* ===================================================================
 *  @func     MultiCh_deleteStreamCaptureDisplay
 *
 *  @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_deleteStreamCaptureDisplay()
Void MultiCh_delete_AR0330_tvp5158_CaptureDisplay_mosaic()
{
	UInt32 MergeId[NUM_MERGE_LINK];

	MergeId[CAM_STREAM_MERGE_IDX] = SYSTEM_VPSS_LINK_ID_MERGE_0;
	/* display link */
	System_linkDelete(gVdisModuleContext.displayId[VDIS_DEV_SD]);

	/* Merge Link */
	System_linkDelete(MergeId[CAM_STREAM_MERGE_IDX]);

	//AV support start
#if 0
	if( Av_scalerId != SYSTEM_LINK_ID_INVALID )
	{
		System_linkDelete(Av_scalerId);
		Av_scalerId = SYSTEM_LINK_ID_INVALID ;
	}
#endif
	//AV support End

	/* Camera Link */
	System_linkDelete(gVcapModuleContext.captureId);
	/* Print the HWI, SWI and all tasks load */
	/* Reset the accumulated timer ticks */
	MultiCh_prfLoadCalcEnable(FALSE, TRUE, FALSE);

	OSA_printf("USECASE TEARDOWN DONE\n");
}

BR

RAJ M