Part Number: DRA72XEVM
Hi TI Forum,
We are trying to run below usecase on our custom board having TDA2xx SoC. We are using Vision SDK 3.0.7
Capture -> Dup -> VPE -> Merge
Dup -> VPE_D2 -> Alg_DmaSwMs -> Merge
Merge -> Display
We have connected 4 cameras. In the above usecase we are trying to display Mosaic view(4 camera display - number of windows set to 4) in Channel 0 and Single channel display in Channel 1,2,3,4
We are using below API to switch between channels 0 to 4.
System_linkControl(displayID,
DISPLAY_LINK_CMD_SWITCH_CH,
¶ms,
sizeof(params),
TRUE);
For channel - 0 we are getting the correct video of all the 4 cameras in Mosaic splitted into 4 windows. We are using below API to set the Mosaic properties.
But when we switch to channel-1,2,3,4 video is not proper seems to be interleaved and distorted. It looks like the video output format is altered by Merge[0].
Expected output when switch to Channel 1 should display from Camera1, Channel 2 should display from Camera2, Channel 3 should display from Camera3, and Channel 4 should display from Camera4 all videos correctly but is displayed distorted and interleaved.
Void ChainsCommon_SetAlgDmaSwMsPrm(
AlgorithmLink_DmaSwMsCreateParams *pPrm,
UInt32 numLvdsCh,
UInt32 channelWidth,
UInt32 channelHeight,
UInt32 channelSpacingHor,
UInt32 channelSpacingVer)
{
UInt32 algId, winId;
UInt32 useLocalEdma;
AlgorithmLink_DmaSwMsLayoutWinInfo *pWinInfo;
useLocalEdma = FALSE;
algId = ALGORITHM_LINK_IPU_ALG_DMA_SWMS;
pPrm->baseClassCreate.algId = algId;
pPrm->numOutBuf = 4;
pPrm->useLocalEdma = useLocalEdma;
pPrm->initLayoutParams.numWin = numLvdsCh; //numCh;
pPrm->maxOutBufWidth = 640;
pPrm->maxOutBufHeight = 480;
for(winId=0; winId<pPrm->initLayoutParams.numWin; winId++)
{
pWinInfo = &pPrm->initLayoutParams.winInfo[winId];
pWinInfo->chId = winId;
//pWinInfo->chId = 0;
pWinInfo->inStartX = 0;
pWinInfo->inStartY = 0;
pWinInfo->width = channelWidth;
pWinInfo->height = channelHeight;
Vps_printf("Win-ID = %d\n", pWinInfo->chId);
/*
* For 4x4 layout
*/
switch(winId)
{
default:
case 0:
pWinInfo->outStartX = 0;
pWinInfo->outStartY = 0;
break;
case 1:
pWinInfo->outStartX = 320; //winWidth;
pWinInfo->outStartY = 0;
pWinInfo->width = 320/*960*/; //winWidth;
pWinInfo->height = 240/*540*/; //winHeight;
break;
case 2:
pWinInfo->outStartX = 0;
pWinInfo->outStartY = 240; //winHeight;
pWinInfo->width = 320/*960*/; //winWidth;
pWinInfo->height = 240/*540*/; //winHeight;
break;
case 3:
pWinInfo->outStartX = 320; //winWidth;
pWinInfo->outStartY = 240; //winHeight;
pWinInfo->width = 320/*960*/; //winWidth;
pWinInfo->height = 240/*540*/; //winHeight;
break;
}
}
pPrm->initLayoutParams.outBufWidth = pPrm->maxOutBufWidth;
pPrm->initLayoutParams.outBufHeight = pPrm->maxOutBufHeight;
}
Regards,
Sudhi