Part Number: TDA2SX
Hi,
i want to implement dual display, and both are also with grpx draw,
so i dup my display link and grpx display link,
in my chains configuration like below,
if(pPrm_VideoHDMI)
{
pPrm_VideoHDMI->rtParams.tarWidth = displayWidthHDMI;
pPrm_VideoHDMI->rtParams.tarHeight = displayHeightHDMI;
pPrm_VideoHDMI->displayId = DISPLAY_LINK_INST_DSS_VID1;
}
if(pPrm_VideoLCD)
{
pPrm_VideoLCD->rtParams.tarWidth = displayWidthLCD;
pPrm_VideoLCD->rtParams.tarHeight = displayHeightLCD;
pPrm_VideoLCD->displayId = DISPLAY_LINK_INST_DSS_VID2;
}
if(pPrm_GrpxHDMI)
{
pPrm_GrpxHDMI->displayId = DISPLAY_LINK_INST_DSS_GFX1;
}
if(pPrm_GrpxLCD)
{
pPrm_GrpxLCD->displayId = DISPLAY_LINK_INST_DSS_VID3;
}
and in chans_common.c like below,
Int32 ChainsCommon_DualDisplay_StartDisplayCtrl(
Chains_DisplayType lcdType, UInt32 displayLCDWidth, UInt32 displayLCDHeight)
{
Int32 status;
DisplayCtrlLink_ConfigParams *pPrm = &gChains_commonObj.dctrlCfgPrms;
DisplayCtrlLink_VencInfo *pVInfo;
DisplayCtrlLink_OvlyParams *pOvlyPrms;
DisplayCtrlLink_OvlyPipeParams *pPipeOvlyPrms;
DisplayCtrlLink_OvlyParams ovlyPrms[2];
/* Set the link id */
gChains_commonObj.displayCtrlLinkId = SYSTEM_LINK_ID_DISPLAYCTRL;
/* Number of valid entries in vencInfo array */
pPrm->numVencs = 2;
/* Bitmask of tied vencs. Two vencs, which uses same pixel clock and whose vsync are synchronized, can be tied together. */
pPrm->tiedVencs = 0;
/* Activate the HDMI BSP layer in the Dctrl link. This is not required if there is no HDMI display in use. */
pPrm->deviceId = DISPLAYCTRL_LINK_USE_HDMI;
/* Configure HDMI display */
pVInfo = &pPrm->vencInfo[0];
pVInfo->vencId = SYSTEM_DCTRL_DSS_VENC_HDMI;
pVInfo->outputPort = SYSTEM_DCTRL_DSS_HDMI_OUTPUT;
pVInfo->vencOutputInfo.vsPolarity = SYSTEM_DCTRL_POLARITY_ACT_HIGH;
pVInfo->vencOutputInfo.hsPolarity = SYSTEM_DCTRL_POLARITY_ACT_HIGH;
/* Below are of dont care for EVM LCD */
pVInfo->vencOutputInfo.fidPolarity = SYSTEM_DCTRL_POLARITY_ACT_LOW;
pVInfo->vencOutputInfo.actVidPolarity = SYSTEM_DCTRL_POLARITY_ACT_HIGH;
/* We use 1080p60 - set to SYSTEM_STD_720P_60 for 720p! */
pVInfo->mInfo.standard = SYSTEM_STD_1080P_60;
/* Configure HDMI overlay parameters */
pVInfo->mode = 0;
pVInfo->isInputPipeConnected[0] = FALSE;
pVInfo->isInputPipeConnected[1] = TRUE;
pVInfo->isInputPipeConnected[2] = TRUE;
pVInfo->isInputPipeConnected[3] = FALSE;
pVInfo->writeBackEnabledFlag = FALSE;
pVInfo->vencOutputInfo.dataFormat = SYSTEM_DF_RGB24_888;
pVInfo->vencOutputInfo.dvoFormat = SYSTEM_DCTRL_DVOFMT_GENERIC_DISCSYNC;
pVInfo->vencOutputInfo.videoIfWidth = SYSTEM_VIFW_24BIT;
pVInfo->vencOutputInfo.pixelClkPolarity = SYSTEM_DCTRL_POLARITY_ACT_HIGH;
pVInfo->vencOutputInfo.aFmt = SYSTEM_DCTRL_A_OUTPUT_MAX;
pOvlyPrms = &ovlyPrms[0];
pOvlyPrms->vencId = pVInfo->vencId;
pOvlyPrms->deltaLinesPerPanel = 0;
pOvlyPrms->alphaBlenderEnable = 0;
pOvlyPrms->backGroundColor = 0x0;
pOvlyPrms->colorKeyEnable = 1;
pOvlyPrms->colorKeySel = SYSTEM_DSS_DISPC_TRANS_COLOR_KEY_SRC;
pOvlyPrms->ovlyOptimization = SYSTEM_DSS_DISPC_OVLY_FETCH_ALLDATA;
pOvlyPrms->transColorKey = DRAW2D_TRANSPARENT_COLOR;
/* Configure LCD */
pVInfo = &pPrm->vencInfo[1];
pVInfo->vencId = SYSTEM_DCTRL_DSS_VENC_LCD1;
pVInfo->outputPort = SYSTEM_DCTRL_DSS_DPI1_OUTPUT;
if ((BSP_PLATFORM_SOC_ID_TDA2EX == Bsp_platformGetSocId()) &&
(BSP_PLATFORM_PACKAGE_TYPE_17x17 == Bsp_platformGetPackageType()))
{
/* In case of TDA2EX and Package is 17 X 17, LCD is on DPI 3 */
pVInfo->vencId = SYSTEM_DCTRL_DSS_VENC_LCD3;
pVInfo->outputPort = SYSTEM_DCTRL_DSS_DPI3_OUTPUT;
}
pVInfo->vencOutputInfo.vsPolarity = SYSTEM_DCTRL_POLARITY_ACT_LOW;
pVInfo->vencOutputInfo.hsPolarity = SYSTEM_DCTRL_POLARITY_ACT_LOW;
/* Below are of dont care for EVM LCD */
pVInfo->vencOutputInfo.fidPolarity = SYSTEM_DCTRL_POLARITY_ACT_HIGH;
pVInfo->vencOutputInfo.actVidPolarity = SYSTEM_DCTRL_POLARITY_ACT_HIGH;
pVInfo->mInfo.standard = SYSTEM_STD_CUSTOM;
pVInfo->mInfo.scanFormat = SYSTEM_SF_PROGRESSIVE;
pVInfo->mInfo.width = displayLCDWidth;
pVInfo->mInfo.height = displayLCDHeight;
if(lcdType == CHAINS_DISPLAY_TYPE_LCD_7_INCH)
{
pVInfo->mInfo.pixelClock = 29232u;
pVInfo->mInfo.fps = 60U;
pVInfo->mInfo.hFrontPorch = 40u;
pVInfo->mInfo.hBackPorch = 40u;
pVInfo->mInfo.hSyncLen = 48u;
pVInfo->mInfo.vFrontPorch = 13u;
pVInfo->mInfo.vBackPorch = 29u;
pVInfo->mInfo.vSyncLen = 3u;
pVInfo->vencDivisorInfo.divisorLCD = 1;
pVInfo->vencDivisorInfo.divisorPCD = 4;
}
else if(lcdType == CHAINS_DISPLAY_TYPE_LCD_10_INCH)
{
pVInfo->mInfo.pixelClock = 74500U;
pVInfo->mInfo.fps = 60U;
pVInfo->mInfo.hBackPorch = 80U;
pVInfo->mInfo.hSyncLen = 62U;
pVInfo->mInfo.hFrontPorch = 48U;
pVInfo->mInfo.vBackPorch = 12U;
pVInfo->mInfo.vSyncLen = 35U;
pVInfo->mInfo.vFrontPorch = 6U;
pVInfo->vencDivisorInfo.divisorLCD = 1;
pVInfo->vencDivisorInfo.divisorPCD = 1;
}
else if (lcdType ==
CHAINS_DISPLAY_TYPE_LDC_10_INCH_LCDCTRL_TC358778_MIPI_DSI_1920_1200)
{
pVInfo->mInfo.pixelClock = 147000U;
pVInfo->mInfo.fps = 60U;
pVInfo->mInfo.hBackPorch = 30U;
pVInfo->mInfo.hSyncLen = 16U;
pVInfo->mInfo.hFrontPorch = 32U;
pVInfo->mInfo.vBackPorch = 16U;
pVInfo->mInfo.vSyncLen = 2U;
pVInfo->mInfo.vFrontPorch = 7U;
pVInfo->vencDivisorInfo.divisorLCD = 1;
pVInfo->vencDivisorInfo.divisorPCD = 1;
}
else if(lcdType == CHAINS_DISPLAY_TYPE_LCD_1080P_NTSC)
{
pPrm->deviceId = DISPLAYCTRL_LINK_USE_LCD;
pVInfo->vencId = SYSTEM_DCTRL_DSS_VENC_LCD1;
pVInfo->outputPort = SYSTEM_DCTRL_DSS_DPI1_OUTPUT;
if ((BSP_PLATFORM_SOC_ID_TDA2EX == Bsp_platformGetSocId()) &&
(BSP_PLATFORM_PACKAGE_TYPE_17x17 == Bsp_platformGetPackageType()))
{
/* In case of TDA2EX and Package is 17 X 17, LCD is on DPI 3 */
pVInfo->vencId = SYSTEM_DCTRL_DSS_VENC_LCD3;
pVInfo->outputPort = SYSTEM_DCTRL_DSS_DPI3_OUTPUT;
}
pVInfo->vencOutputInfo.vsPolarity = SYSTEM_DCTRL_POLARITY_ACT_LOW;
pVInfo->vencOutputInfo.hsPolarity = SYSTEM_DCTRL_POLARITY_ACT_LOW;
/* Below are of dont care for EVM LCD */
pVInfo->vencOutputInfo.fidPolarity = SYSTEM_DCTRL_POLARITY_ACT_HIGH;
pVInfo->vencOutputInfo.actVidPolarity = SYSTEM_DCTRL_POLARITY_ACT_HIGH;
pVInfo->mInfo.standard = SYSTEM_STD_CUSTOM;
pVInfo->mInfo.width = displayLCDWidth;
pVInfo->mInfo.height = displayLCDHeight;
pVInfo->mInfo.scanFormat = SYSTEM_SF_PROGRESSIVE;
pVInfo->mInfo.fps = 60U;
pVInfo->mInfo.hFrontPorch = 48U;
pVInfo->mInfo.vBackPorch = 12U;
pVInfo->mInfo.vFrontPorch = 6U;
pVInfo->vencDivisorInfo.divisorLCD = 1;
pVInfo->mInfo.pixelClock = 74500U;
pVInfo->mInfo.hBackPorch = 80U;
pVInfo->mInfo.hSyncLen = 62U;
pVInfo->mInfo.vSyncLen = 35U;
pVInfo->vencDivisorInfo.divisorPCD = 1;
//Added by Tim 2020/09/15
pVInfo->mInfo.pixelClock = 74250U;
pVInfo->mInfo.vBackPorch = 36U;
pVInfo->mInfo.vSyncLen = 5U;
pVInfo->mInfo.vFrontPorch = 4U;
pVInfo->mInfo.hBackPorch = 148U;
pVInfo->mInfo.hSyncLen = 44U;
pVInfo->mInfo.hFrontPorch = 88U;
pVInfo->mInfo.fps = 30U;
PSVT_VoutConfigPrint(pVInfo);
pVInfo->vencOutputInfo.dataFormat = SYSTEM_DF_RGB24_888;
pVInfo->vencOutputInfo.dvoFormat =
SYSTEM_DCTRL_DVOFMT_GENERIC_DISCSYNC;
pVInfo->vencOutputInfo.videoIfWidth = SYSTEM_VIFW_24BIT;
pVInfo->vencOutputInfo.pixelClkPolarity = SYSTEM_DCTRL_POLARITY_ACT_LOW;
pVInfo->vencOutputInfo.aFmt = SYSTEM_DCTRL_A_OUTPUT_MAX;
/* Configure overlay params */
ovlyPrms->vencId = SYSTEM_DCTRL_DSS_VENC_LCD1;
if ((BSP_PLATFORM_SOC_ID_TDA2EX == Bsp_platformGetSocId()) &&
(BSP_PLATFORM_PACKAGE_TYPE_17x17 == Bsp_platformGetPackageType()))
{
/* In case of TDA2EX and Package is 17 X 17, LCD is on DPI 3 */
ovlyPrms->vencId = SYSTEM_DCTRL_DSS_VENC_LCD3;
}
}
else if(lcdType == CHAINS_DISPLAY_TYPE_LCD_1080P_PAL)
{
pPrm->deviceId = DISPLAYCTRL_LINK_USE_LCD;
pVInfo->vencId = SYSTEM_DCTRL_DSS_VENC_LCD1;
pVInfo->outputPort = SYSTEM_DCTRL_DSS_DPI1_OUTPUT;
if ((BSP_PLATFORM_SOC_ID_TDA2EX == Bsp_platformGetSocId()) &&
(BSP_PLATFORM_PACKAGE_TYPE_17x17 == Bsp_platformGetPackageType()))
{
/* In case of TDA2EX and Package is 17 X 17, LCD is on DPI 3 */
pVInfo->vencId = SYSTEM_DCTRL_DSS_VENC_LCD3;
pVInfo->outputPort = SYSTEM_DCTRL_DSS_DPI3_OUTPUT;
}
pVInfo->vencOutputInfo.vsPolarity = SYSTEM_DCTRL_POLARITY_ACT_LOW;
pVInfo->vencOutputInfo.hsPolarity = SYSTEM_DCTRL_POLARITY_ACT_LOW;
/* Below are of dont care for EVM LCD */
pVInfo->vencOutputInfo.fidPolarity = SYSTEM_DCTRL_POLARITY_ACT_HIGH;
pVInfo->vencOutputInfo.actVidPolarity = SYSTEM_DCTRL_POLARITY_ACT_HIGH;
pVInfo->mInfo.standard = SYSTEM_STD_CUSTOM;
pVInfo->mInfo.width = displayLCDWidth;
pVInfo->mInfo.height = displayLCDHeight;
pVInfo->mInfo.scanFormat = SYSTEM_SF_PROGRESSIVE;
pVInfo->mInfo.fps = 60U;
pVInfo->mInfo.hFrontPorch = 48U;
pVInfo->mInfo.vBackPorch = 12U;
pVInfo->mInfo.vFrontPorch = 6U;
pVInfo->vencDivisorInfo.divisorLCD = 1;
pVInfo->mInfo.pixelClock = 74500U;
pVInfo->mInfo.hBackPorch = 80U;
pVInfo->mInfo.hSyncLen = 62U;
pVInfo->mInfo.vSyncLen = 35U;
pVInfo->vencDivisorInfo.divisorPCD = 1;
//Added by Tim 2020/09/15
pVInfo->mInfo.pixelClock = 74250U;
pVInfo->mInfo.vBackPorch = 36U;
pVInfo->mInfo.vSyncLen = 5U;
pVInfo->mInfo.vFrontPorch = 4U;
pVInfo->mInfo.hBackPorch = 148U;
pVInfo->mInfo.hSyncLen = 44U;
pVInfo->mInfo.hFrontPorch = 528U;
pVInfo->mInfo.fps = 25U;
PSVT_VoutConfigPrint(pVInfo);
pVInfo->vencOutputInfo.dataFormat = SYSTEM_DF_RGB24_888;
pVInfo->vencOutputInfo.dvoFormat =
SYSTEM_DCTRL_DVOFMT_GENERIC_DISCSYNC;
pVInfo->vencOutputInfo.videoIfWidth = SYSTEM_VIFW_24BIT;
pVInfo->vencOutputInfo.pixelClkPolarity = SYSTEM_DCTRL_POLARITY_ACT_LOW;
pVInfo->vencOutputInfo.aFmt = SYSTEM_DCTRL_A_OUTPUT_MAX;
/* Configure overlay params */
ovlyPrms->vencId = SYSTEM_DCTRL_DSS_VENC_LCD1;
if ((BSP_PLATFORM_SOC_ID_TDA2EX == Bsp_platformGetSocId()) &&
(BSP_PLATFORM_PACKAGE_TYPE_17x17 == Bsp_platformGetPackageType()))
{
/* In case of TDA2EX and Package is 17 X 17, LCD is on DPI 3 */
ovlyPrms->vencId = SYSTEM_DCTRL_DSS_VENC_LCD3;
}
}
else
UTILS_assert(NULL);
/* Configure LCD overlay params */
pVInfo->mode = 0;
pVInfo->isInputPipeConnected[0] = TRUE;
pVInfo->isInputPipeConnected[1] = FALSE;
pVInfo->isInputPipeConnected[2] = FALSE;
pVInfo->isInputPipeConnected[3] = TRUE;
pVInfo->writeBackEnabledFlag = FALSE;
pVInfo->vencOutputInfo.dataFormat = SYSTEM_DF_RGB24_888;
pVInfo->vencOutputInfo.dvoFormat = SYSTEM_DCTRL_DVOFMT_GENERIC_DISCSYNC;
pVInfo->vencOutputInfo.videoIfWidth = SYSTEM_VIFW_24BIT;
pVInfo->vencOutputInfo.pixelClkPolarity = SYSTEM_DCTRL_POLARITY_ACT_LOW;
pVInfo->vencOutputInfo.aFmt = SYSTEM_DCTRL_A_OUTPUT_MAX;
pOvlyPrms = &ovlyPrms[1];
pOvlyPrms->vencId = pVInfo->vencId;
pOvlyPrms->deltaLinesPerPanel = 0;
pOvlyPrms->alphaBlenderEnable = 0;
pOvlyPrms->backGroundColor = 0x0;
pOvlyPrms->colorKeyEnable = 1;
pOvlyPrms->colorKeySel = SYSTEM_DSS_DISPC_TRANS_COLOR_KEY_SRC;
pOvlyPrms->ovlyOptimization = SYSTEM_DSS_DISPC_OVLY_FETCH_ALLDATA;
pOvlyPrms->transColorKey = DRAW2D_TRANSPARENT_COLOR;
/* Setting HDMI overlay pipe parameters */
pPipeOvlyPrms = &gChains_commonObj.pipeParams[0];
pPipeOvlyPrms->pipeLine = SYSTEM_DSS_DISPC_PIPE_VID1;
pPipeOvlyPrms->globalAlpha = 0xFF;
pPipeOvlyPrms->preMultiplyAlpha = 0;
pPipeOvlyPrms->zorderEnable = TRUE;
pPipeOvlyPrms->zorder = SYSTEM_DSS_DISPC_ZORDER0;
/* Setting LCD overlay pipe parameters */
pPipeOvlyPrms = &gChains_commonObj.pipeParams[1];
pPipeOvlyPrms->pipeLine = SYSTEM_DSS_DISPC_PIPE_VID2;
pPipeOvlyPrms->globalAlpha = 0xFF;
pPipeOvlyPrms->preMultiplyAlpha = 0;
pPipeOvlyPrms->zorderEnable = TRUE;
pPipeOvlyPrms->zorder = SYSTEM_DSS_DISPC_ZORDER0;
/* Setting PIP overlay pipe parameters on LCD */
pPipeOvlyPrms = &gChains_commonObj.pipeParams[2];
pPipeOvlyPrms->pipeLine = SYSTEM_DSS_DISPC_PIPE_VID3;
pPipeOvlyPrms->globalAlpha = 0xFF;
pPipeOvlyPrms->preMultiplyAlpha = 0;
pPipeOvlyPrms->zorderEnable = TRUE;
pPipeOvlyPrms->zorder = SYSTEM_DSS_DISPC_ZORDER3;
/* Configure graphics overlay for HDMI */
pPipeOvlyPrms = &gChains_commonObj.pipeParams[3];
pPipeOvlyPrms->pipeLine = SYSTEM_DSS_DISPC_PIPE_GFX1;
pPipeOvlyPrms->globalAlpha = 0xFF;
pPipeOvlyPrms->preMultiplyAlpha = 0;
pPipeOvlyPrms->zorderEnable = TRUE;
pPipeOvlyPrms->zorder = SYSTEM_DSS_DISPC_ZORDER3;
/* Create, configure and start the Display Ctrl link */
status = System_linkCreate(gChains_commonObj.displayCtrlLinkId,
NULL,
0);
UTILS_assert(status == SYSTEM_LINK_STATUS_SOK);
status = System_linkControl(gChains_commonObj.displayCtrlLinkId,
DISPLAYCTRL_LINK_CMD_SET_CONFIG,
&gChains_commonObj.dctrlCfgPrms,
sizeof(DisplayCtrlLink_ConfigParams),
TRUE);
UTILS_assert(status == SYSTEM_LINK_STATUS_SOK);
status = System_linkControl(gChains_commonObj.displayCtrlLinkId,
DISPLAYCTRL_LINK_CMD_SET_OVLY_PARAMS,
&ovlyPrms[0],
sizeof(DisplayCtrlLink_OvlyParams),
TRUE);
UTILS_assert(status == SYSTEM_LINK_STATUS_SOK);
status = System_linkControl(gChains_commonObj.displayCtrlLinkId,
DISPLAYCTRL_LINK_CMD_SET_OVLY_PARAMS,
&ovlyPrms[1],
sizeof(DisplayCtrlLink_OvlyParams),
TRUE);
UTILS_assert(status == SYSTEM_LINK_STATUS_SOK);
status = System_linkControl(gChains_commonObj.displayCtrlLinkId,
DISPLAYCTRL_LINK_CMD_SET_OVLY_PIPELINE_PARAMS,
&gChains_commonObj.pipeParams[0],
sizeof(DisplayCtrlLink_OvlyPipeParams),
TRUE);
UTILS_assert(status == SYSTEM_LINK_STATUS_SOK);
status = System_linkControl(gChains_commonObj.displayCtrlLinkId,
DISPLAYCTRL_LINK_CMD_SET_OVLY_PIPELINE_PARAMS,
&gChains_commonObj.pipeParams[1],
sizeof(DisplayCtrlLink_OvlyPipeParams),
TRUE);
UTILS_assert(status == SYSTEM_LINK_STATUS_SOK);
status = System_linkControl(gChains_commonObj.displayCtrlLinkId,
DISPLAYCTRL_LINK_CMD_SET_OVLY_PIPELINE_PARAMS,
&gChains_commonObj.pipeParams[2],
sizeof(DisplayCtrlLink_OvlyPipeParams),
TRUE);
UTILS_assert(status == SYSTEM_LINK_STATUS_SOK);
status = System_linkControl(gChains_commonObj.displayCtrlLinkId,
DISPLAYCTRL_LINK_CMD_SET_OVLY_PIPELINE_PARAMS,
&gChains_commonObj.pipeParams[3],
sizeof(DisplayCtrlLink_OvlyPipeParams),
TRUE);
UTILS_assert(status == SYSTEM_LINK_STATUS_SOK);
return status;
}
the results was LCD showed camera sensor image + grpx draw,
but the HDMI only showed grpx draw,
then i tried to change SYSTEM_DSS_DISPC_PIPE_GFX1 globalAlpha from 0xff to 0x7f like below,
/* Configure graphics overlay for HDMI */
pPipeOvlyPrms = &gChains_commonObj.pipeParams[3];
pPipeOvlyPrms->pipeLine = SYSTEM_DSS_DISPC_PIPE_GFX1;
pPipeOvlyPrms->globalAlpha = 0x7F;
pPipeOvlyPrms->preMultiplyAlpha = 0;
pPipeOvlyPrms->zorderEnable = TRUE;
pPipeOvlyPrms->zorder = SYSTEM_DSS_DISPC_ZORDER3;
i found that HDMI showed camera sensor image + grpx draw now,
so in fact, when globalAlpha value was 0xff,
there was also showed camera sensor image + grpx draw,
is that mean grpx's bufInfo.transperentColor = DRAW2D_TRANSPARENT_COLOR; <- this function not working?
so HDMI grpx backround color not became tansparent?
or is there something not setting, like zorder?