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.

DRA72XEVM: Scaling of video causes the display freeze once kernel load starts

Part Number: DRA72XEVM

Hi TI Forum,

We are using custom board having TDA2xx SoC. We are using Vision SDK 3.0.7

We have a requirement wherein we would need to switch between splash screen and Reverse camera display during boot till completion of Linux kernel load.

Iam trying to display 1 channel video and still image based on user selection whether he wants splash image or Reverse camera video.

If user presses Switch-1 then still image has to be displayed, which is displaying properly.

If user presses Switch-2 then Reverse camera Video has to be displayed. But when user selects this switch Video is getting distorted. Then after analysing found the data format of image and video differs hence this problem. 

The splash image is of SYSTEM_DF_YUV420SP_UV format and video is SYSTEM_DF_YUV422I_YUYV

To resolve this used the below function which converts the captured video to SYSTEM_DF_YUV420SP_UV. As this is Reverse Camera feature the firmware is loaded(Early Load) during uboot so that within 2-3 seconds Reverse camera is displayed. Till uboot display of both Splash image and video is proper. But as soon as Linux kernel load starts, the display is getting freezed. If the below conversion is not done there is no freeze but display is distorted. Could you please clarify if the below conversion module is a limitation? If not, how could we resolve. If we see the logs we are seeing XDC Error.

Void ChainsCommon_SetVPEPrms(VpeLink_CreateParams *pPrm,
                        UInt32 captureInWidth,
                        UInt32 captureInHeight
                        )
{

    UInt32 outId, chId;
    VpeLink_ChannelParams *chPrms;

    memset(pPrm, 0, sizeof(*pPrm));

    pPrm->enableOut[0] = TRUE;
    pPrm->enableOut[1] = FALSE;

    for(outId=0; outId<VPE_LINK_OUT_QUE_ID_MAX; outId++)
    {
        for (chId = 0; chId < 1; chId++)
        {
                chPrms = &pPrm->chParams[chId];
                chPrms->outParams[outId].numBufsPerCh = 10;//4;//4;//VPE_LINK_NUM_BUFS_PER_CH_DEFAULT;
                chPrms->outParams[outId].inputFrameRate = 50;
                chPrms->outParams[outId].outputFrameRate = 50;

                chPrms->outParams[outId].width  = captureInWidth;
                chPrms->outParams[outId].height = captureInHeight;
                chPrms->outParams[outId].dataFormat = SYSTEM_DF_YUV420SP_UV;

                chPrms->deiCfg.bypass = FALSE;

                chPrms->deiCfg.inpMode = VPE_DEI_EDIMODE_LUMA_CHROMA;
                chPrms->deiCfg.tempInpEnable = TRUE;
                chPrms->deiCfg.tempInpChromaEnable = TRUE;
                chPrms->deiCfg.spatMaxBypass = TRUE;
                chPrms->deiCfg.tempMaxBypass = TRUE;
                chPrms->scCfg.bypass       = TRUE;//FALSE;//TRUE;
                chPrms->scCfg.nonLinear    = FALSE;
                chPrms->scCfg.stripSize    = 0;

                chPrms->scCropCfg.cropStartX = 0;
                chPrms->scCropCfg.cropStartY = 0;
                chPrms->scCropCfg.cropWidth  = captureInWidth;//0;
                chPrms->scCropCfg.cropHeight = captureInHeight;//0;
        }
   }
}