各位好,
我将8127前端从sensor替换成了模拟摄像头输入,link连接方式为capturelink->deilink->nsflink->......!目标顺利完成。
接下来,我希望用马赛克link将四路画面拼接为一副画面,link连接方式为:capturelink->deilink->swmslink->nsflink->......。
但是按照上述目标,我在usecase中修改了代码,但是运行之后窗口1,2,3分别显示通道1,2,3的视频画面正常,但是窗口0显示通道0数据是异常:具体异常如下:1、画面前端有密集的黄色雪花遮挡。2、通道0的视频画面并未经过缩放,画面尺寸明显与其他通道不同。具体显示图像如附件中所示。麻烦各位帮忙分析下问题.
usecase中link连接具体代码如下所示:
//config 5158
numCaptureDevices = 1;
for(i = 0; i < numCaptureDevices; i++)
{
vidDecVideoModeArgs[i].videoIfMode = DEVICE_CAPT_VIDEO_IF_MODE_8BIT;
vidDecVideoModeArgs[i].videoDataFormat = SYSTEM_DF_YUV422P;
vidDecVideoModeArgs[i].standard = SYSTEM_STD_MUX_4CH_D1;
vidDecVideoModeArgs[i].videoCaptureMode =
DEVICE_CAPT_VIDEO_CAPTURE_MODE_MULTI_CH_PIXEL_MUX_EMBEDDED_SYNC;
vidDecVideoModeArgs[i].videoSystem =
DEVICE_VIDEO_DECODER_VIDEO_SYSTEM_AUTO_DETECT;
vidDecVideoModeArgs[i].videoCropEnable = TRUE;//FALSE;
vidDecVideoModeArgs[i].videoAutoDetectTimeout = -1;
} //added ydp
OSA_printf("\n********* ----------------Config Tvp5158---------------- ********\n\n");
Vcap_configVideoDecoder(vidDecVideoModeArgs, numCaptureDevices);//added ydp
//Links
CaptureLink_CreateParams_Init(&capturePrm);
capturePrm.numVipInst = 1;
capturePrm.outQueParams[0].nextLink = gVcapModuleContext.deiId[0];//ipcFramesOutVpssId; dei
capturePrm.tilerEnable = FALSE;
capturePrm.enableSdCrop = FALSE;
for(vipInstId=0; vipInstId<capturePrm.numVipInst; vipInstId++)
{
pCaptureInstPrm = &capturePrm.vipInst[vipInstId];
pCaptureInstPrm->vipInstId = (SYSTEM_CAPTURE_INST_VIP0_PORTA+vipInstId)%SYSTEM_CAPTURE_INST_MAX;
pCaptureInstPrm->videoDecoderId = SYSTEM_DEVICE_VID_DEC_TVP5158_DRV;
pCaptureInstPrm->inDataFormat = SYSTEM_DF_YUV422P;
pCaptureInstPrm->standard = SYSTEM_STD_MUX_4CH_D1;
pCaptureInstPrm->numOutput = 1;
pCaptureOutPrm = &pCaptureInstPrm->outParams[0];
pCaptureOutPrm->dataFormat = SYSTEM_DF_YUV422I_YUYV;
pCaptureOutPrm->scEnable = FALSE;
pCaptureOutPrm->scOutWidth = 0;
pCaptureOutPrm->scOutHeight = 0;
pCaptureOutPrm->outQueId = 0;
}
/* Dei link params *///dei
DeiLink_CreateParams_Init(&deiPrm);
deiPrm.inQueParams.prevLinkId = gVcapModuleContext.captureId;//gVcapModuleContext.nsfId[0];
deiPrm.inQueParams.prevLinkQueId = 0;
deiPrm.outQueParams[0].nextLink = gVdisModuleContext.swMsId[0];//0626
deiPrm.enableOut[0] = TRUE;
deiPrm.tilerEnable = FALSE;//FALSE->TRUE 0630
deiPrm.comprEnable = FALSE;
deiPrm.setVipScYuv422Format = FALSE;
deiPrm.outScaleFactor[0][0].scaleMode = DEI_SCALE_MODE_RATIO;
deiPrm.outScaleFactor[0][0].ratio.widthRatio.numerator = 1;
deiPrm.outScaleFactor[0][0].ratio.widthRatio.denominator = 1;
deiPrm.outScaleFactor[0][0].ratio.heightRatio.numerator = 1;
deiPrm.outScaleFactor[0][0].ratio.heightRatio.denominator = 1;
Int32 chId;
for (chId=1; chId < DEI_LINK_MAX_CH; chId++)
deiPrm.outScaleFactor[0][chId] = deiPrm.outScaleFactor[0][0];
/* Software mosaic link params */
swMsPrm.numSwMsInst = 1; //number of scaler instance in one sw mosaic
swMsPrm.swMsInstId[0] = SYSTEM_SW_MS_SC_INST_VIP0_SC;//scaler ID of each scaler instance
swMsPrm.swMsInstStartWin[0] = 0;//0 start win ID for each scaler instance
//swMsPrm.swMsInstStartWin[1] = 4;//
swMsPrm.inQueParams.prevLinkId = gVcapModuleContext.deiId[0];//
swMsPrm.inQueParams.prevLinkQueId = 0;//
swMsPrm.outQueParams.nextLink = gVcapModuleContext.nsfId[0];//
swMsPrm.numOutBuf = MULTICH_NUM_SWMS_MAX_BUFFERS;//0626
swMsPrm.maxOutRes = VSYS_STD_1080P_60;//
swMsPrm.lineSkipMode = TRUE;//
swMsPrm.enableLayoutGridDraw = gVdisModuleContext.vdisConfig.enableLayoutGridDraw;//
swMsPrm.maxInputQueLen = SYSTEM_SW_MS_INVALID_INPUT_QUE_LEN; //
swMsPrm.enableOuputDup = TRUE;
swMsPrm.enableProcessTieWithDisplay = TRUE;//
Cap_swMsGetDefaultLayoutPrm(0, &swMsPrm, FALSE);
以上是swmslink之前的配置代码,另外在马赛克link最后调用的函数Cap_swMsGetDefaultLayoutPrm是我根据ti提供的相应函数自定义的,具体内容如下:
Void Cap_swMsGetDefaultLayoutPrm(int devId, SwMsLink_CreateParams *swMsCreateArgs, Bool forceLowCostScaling)
{
SwMsLink_LayoutPrm *layoutInfo;
SwMsLink_LayoutWinInfo *winInfo;
VDIS_MOSAIC_S *mosaicParam;
if(devId>=VDIS_DEV_MAX)
devId = VDIS_DEV_HDMI;
layoutInfo = &swMsCreateArgs->layoutPrm;
/* init to known default */
memset(layoutInfo, 0, sizeof(*layoutInfo));
mosaicParam = &(gVdisModuleContext.vdisConfig.mosaicParams[devId]);
layoutInfo->onlyCh2WinMapChanged = FALSE;
layoutInfo->outputFPS = 30;
layoutInfo->numWin = 4;
winInfo = &layoutInfo->winInfo[0];
winInfo->width = 960;
winInfo->height = 540;
winInfo->startX = 0;
winInfo->startY = 0;
winInfo->channelNum = 0;
winInfo->bypass = FALSE;
winInfo = &layoutInfo->winInfo[1];
winInfo->width = 960;
winInfo->height = 540;
winInfo->startX = 960;
winInfo->startY = 0;
winInfo->channelNum = 1;
winInfo->bypass = FALSE;
winInfo = &layoutInfo->winInfo[2];
winInfo->width = 960;
winInfo->height = 540;
winInfo->startX = 0;
winInfo->startY = 540;
winInfo->channelNum = 2;
winInfo->bypass = FALSE;
winInfo = &layoutInfo->winInfo[3];
winInfo->width = 960;
winInfo->height = 540;
winInfo->startX = 960;
winInfo->startY = 540;
winInfo->channelNum = 3;
winInfo->bypass = FALSE;
}