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

