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.

Two channel input resize issue in VPE on TDA2x

Requirement:

  • Two channel input to VPE :1280x800, YUV422Interlaced
  • Two channel output from VPE : 640x400, YUV422Interlaced

Use case:

NullSource (A15) -> VPE -> Select_alg

Select_alg -> Alg_FrameCopy_1 (DSP1) -> Merge_alg

Select_alg -> Alg_FrameCopy_2 (A15) -> Merge_alg

Merge_alg -> Sync_alg -> Alg_Decision -> Dup_Output -> Display_Video

Dup_Output -> Null (A15)

GrpxSrc -> Display_Grpx

Observations:

  1. Channel 1 and Channel 2 input images are proper (1280x800, YUV422I). Verified by dumping the images.
  2. First channel VPE output is perfect (640x400, YUV422I)
  3. Second channel VPE output is wrong. Observed 640x200 Image
  4. Same issues were observed even after choosing two separate instances of VPE as below

NullSource (A15) -> Select_alg

Select_alg -> VPE_1 ->  Alg_FrameCopy_1 (DSP1) -> Merge_alg

Select_alg -> VPE_2 -> Alg_FrameCopy_2 (A15) -> Merge_alg

Merge_alg -> Sync_alg -> Alg_Decision -> Dup_Output -> Display_Video

Dup_Output -> Null (A15)

GrpxSrc -> Display_Grpx

Note:

Pls find attached VPE output for channel 1 and channel 2 with this thread.

Support needed:https://e2e.ti.com/cfs-file/__key/communityserver-discussions-components-files/791/VPEOut.7z

Could you please suggest possible solution to get proper output on channel 2 (640x400, YUV422I)

  • As suggested earlier we tested above use case for YUV420 SP also. We got same issue as stated in previous post. Our requirement is for YUV422Interlaced.

    Thanks
  • Hi, Socrates,

    I have pinged expert to comment here.

    Regards,
    Mariya
  • Hi Socrates,

    Can you please provide us the VPE link create paramters that is being done in your usecase?

    Regards,
    Sujith
  • Hi Sujith,

    Below is the VPE create time parameters for


    1) single VPE instance and two channel input

    pPrm->enableOut[0] = TRUE;
    pPrm->chParams[0].outParams[0].width = SystemUtils_floor(outWidth,4);
    pPrm->chParams[0].outParams[0].height = SystemUtils_floor(outHeight, 2);
    pPrm->chParams[0].outParams[0].numBufsPerCh = 5;
    pPrm->chParams[0].scCropCfg.cropStartX = 0;
    pPrm->chParams[0].scCropCfg.cropStartY = 0;
    pPrm->chParams[0].scCropCfg.cropWidth = srcWidth;
    pPrm->chParams[0].scCropCfg.cropHeight = srcHeight;
    pPrm->chParams[0].outParams[0].dataFormat = dataFormat;
    pPrm->chParams[1].outParams[0].width = SystemUtils_floor(outWidth,4);
    pPrm->chParams[1].outParams[0].height = SystemUtils_floor(outHeight, 2);
    pPrm->chParams[1].outParams[0].numBufsPerCh = 5;
    pPrm->chParams[1].scCropCfg.cropStartX = 0;
    pPrm->chParams[1].scCropCfg.cropStartY = 0;
    pPrm->chParams[1].scCropCfg.cropWidth = srcWidth;
    pPrm->chParams[1].scCropCfg.cropHeight = srcHeight;
    pPrm->chParams[1].outParams[0].dataFormat = dataFormat;

    2) Two separate instances of VPE

    pPrm1->enableOut[0] = TRUE;
    pPrm1->chParams[0].outParams[0].width = SystemUtils_floor(outWidth,4);
    pPrm1->chParams[0].outParams[0].height = SystemUtils_floor(outHeight, 2);
    pPrm1->chParams[0].outParams[0].numBufsPerCh = 5;
    pPrm1->chParams[0].scCropCfg.cropStartX = 0;
    pPrm1->chParams[0].scCropCfg.cropStartY = 0;
    pPrm1->chParams[0].scCropCfg.cropWidth = srcWidth;
    pPrm1->chParams[0].scCropCfg.cropHeight = srcHeight;
    pPrm1->chParams[0].outParams[0].dataFormat = dataFormat;
    pPrm1->chParams[0].scCfg.bypass = FALSE;
    pPrm1->chParams[0].scCfg.nonLinear = FALSE;
    pPrm1->chParams[0].scCfg.stripSize = 0;
    pPrm2->enableOut[0] = TRUE;
    pPrm2->chParams[0].outParams[0].width = SystemUtils_floor(outWidth,4);
    pPrm2->chParams[0].outParams[0].height = SystemUtils_floor(outHeight, 2);
    pPrm2->chParams[0].outParams[0].numBufsPerCh = 5;
    pPrm2->chParams[0].scCropCfg.cropStartX = 0;
    pPrm2->chParams[0].scCropCfg.cropStartY = 0;
    pPrm2->chParams[0].scCropCfg.cropWidth = srcWidth;
    pPrm2->chParams[0].scCropCfg.cropHeight = srcHeight;
    pPrm2->chParams[0].outParams[0].dataFormat = dataFormat;

    (outWidth=640,outHeight=400,srcWidth=1280,srcHeight=800,dataFormat=SYSTEM_DF_YUV422I_YUYV)

    Regards,

    Socrates

  • Hi Sujith,

    Please find attached usecase file for your reference.

    Regards,

    /*
     *******************************************************************************
     *
     * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
     * ALL RIGHTS RESERVED
     *
     *******************************************************************************
     */
    
    /*******************************************************************************
     *  INCLUDE FILES
     *******************************************************************************
     */
    #include "chains_network_integrated_priv.h"
    #include <examples/tda2xx/include/chains_common.h>
    
    #define KPIT_MODIFICATIONS
    
    #define CAPTURE_SENSOR_WIDTH      (1280)
    #define CAPTURE_SENSOR_HEIGHT     (800)
    
    #define ALGORITHM_WIDTH  (640)
    #define ALGORITHM_HEIGHT  (400)
    /**
     *******************************************************************************
     *
     *  \brief  Use-case object
     *
     *        This structure contains all the LinksId's and create Params.
     *        The same is passed to all create, start, stop functions.
     *
     *******************************************************************************
    */
    typedef struct {
    
    	chains_network_integratedObj ucObj;
    
        UInt32  captureOutWidth;
        UInt32  captureOutHeight;
        UInt32  displayWidth;
        UInt32  displayHeight;
    
        UInt32 numCh;
        UInt32  displayActiveChId;
        Chains_Ctrl *chainsCfg;
    
    } chains_network_integratedAppObj;
    
    
    /**
     *******************************************************************************
     * \brief   Set create parameters for NullSrc
     *******************************************************************************
    */
    Void chains_network_integrated_SetNullSrcPrms(chains_network_integratedAppObj *pObj,
                            NullSrcLink_CreateParams *pPrm)
    {
        UInt32 chId;
        System_LinkChInfo *pChInfo;
    
        pPrm->outQueInfo.numCh = 2;
    
        pObj->numCh = pPrm->outQueInfo.numCh;
    #ifdef KPIT_MODIFICATIONS
        pPrm->timerPeriodMilliSecs = 100;
    #else
        pPrm->timerPeriodMilliSecs = 1000;
    #endif
    
        for (chId = 0; chId < pPrm->outQueInfo.numCh; chId++)
        {
            pPrm->channelParams[chId].numBuffers = 5;
    
            pChInfo = &pPrm->outQueInfo.chInfo[chId];
    
    #ifdef KPIT_MODIFICATIONS
            pChInfo->flags = System_Link_Ch_Info_Set_Flag_Data_Format(pChInfo->flags,
                                                        SYSTEM_DF_YUV422I_YUYV);
    #else
            pChInfo->flags = System_Link_Ch_Info_Set_Flag_Data_Format(pChInfo->flags,
                                                        SYSTEM_DF_YUV420SP_UV);
    #endif
            pChInfo->flags = System_Link_Ch_Info_Set_Flag_Data_Format(pChInfo->flags,
                                                        SYSTEM_SF_PROGRESSIVE);
            pChInfo->flags = System_Link_Ch_Info_Set_Flag_Buf_Type(pChInfo->flags,
                                                   SYSTEM_BUFFER_TYPE_VIDEO_FRAME);
            pChInfo->width  = pObj->captureOutWidth;
            pChInfo->height = pObj->captureOutHeight;
            pChInfo->startX = 0;
            pChInfo->startY = 0;
    #ifdef KPIT_MODIFICATIONS
            pChInfo->pitch[0] = SystemUtils_align((pChInfo->width*2), 32);
            pChInfo->pitch[1] = SystemUtils_align((pChInfo->width*2), 32);
    #else
            pChInfo->pitch[0] = SystemUtils_align(pChInfo->width, 32);
            pChInfo->pitch[1] = SystemUtils_align(pChInfo->width, 32);
    #endif
    
    
        }
    
        pPrm->networkServerPort = NETWORK_RX_SERVER_PORT;
        pPrm->dataRxMode = NULLSRC_LINK_DATA_RX_MODE_NETWORK;
    }
    
    
    Void chains_network_integrated_SetNullPrms(NullLink_CreateParams *pPrm)
    {
        pPrm->dumpDataType = NULL_LINK_COPY_TYPE_NETWORK;
        pPrm->networkServerPort = NETWORK_TX_SERVER_PORT;
    }
    
    
    /**
     *******************************************************************************
     *
     * \brief   Set VPE Create Parameters
     *
     * \param   pPrm    [OUT]    VpeLink_CreateParams
     *
     *******************************************************************************
    */
    Void chains_network_integrated_SetVpePrm(
                        VpeLink_CreateParams *pPrm1,
                        VpeLink_CreateParams *pPrm2,
                        UInt32 outWidth,
                        UInt32 outHeight,
                        UInt32 srcWidth,
                        UInt32 srcHeight,
                        System_VideoDataFormat dataFormat
                        )
    {
        pPrm1->enableOut[0] = TRUE;
    
        pPrm1->chParams[0].outParams[0].width = SystemUtils_floor(outWidth,4);
        pPrm1->chParams[0].outParams[0].height = SystemUtils_floor(outHeight, 2);
        pPrm1->chParams[0].outParams[0].numBufsPerCh = 5;
    
        pPrm1->chParams[0].scCropCfg.cropStartX = 0;
        pPrm1->chParams[0].scCropCfg.cropStartY = 0;
        pPrm1->chParams[0].scCropCfg.cropWidth  = srcWidth;
        pPrm1->chParams[0].scCropCfg.cropHeight = srcHeight;
    
        pPrm1->chParams[0].outParams[0].dataFormat = dataFormat;
    
        pPrm1->chParams[0].scCfg.bypass       = FALSE;
        pPrm1->chParams[0].scCfg.nonLinear    = FALSE;
        pPrm1->chParams[0].scCfg.stripSize    = 0;
    
        pPrm2->enableOut[0] = TRUE;
        pPrm2->chParams[0].outParams[0].width = SystemUtils_floor(outWidth,4);
        pPrm2->chParams[0].outParams[0].height = SystemUtils_floor(outHeight, 2);
        pPrm2->chParams[0].outParams[0].numBufsPerCh = 5;
    
        pPrm2->chParams[0].scCropCfg.cropStartX = 0;
        pPrm2->chParams[0].scCropCfg.cropStartY = 0;
        pPrm2->chParams[0].scCropCfg.cropWidth  = srcWidth;
        pPrm2->chParams[0].scCropCfg.cropHeight = srcHeight;
    
        pPrm2->chParams[0].outParams[0].dataFormat = dataFormat;
    
        pPrm2->chParams[0].scCfg.bypass       = FALSE;
        pPrm2->chParams[0].scCfg.nonLinear    = FALSE;
        pPrm2->chParams[0].scCfg.stripSize    = 0;
    
    }
    
    
    Void chains_network_integrated_SetDisplayPrms(
                                    DisplayLink_CreateParams *pPrm,
                                    UInt32 displayID,
                                    UInt32 displayWinStartX,
                                    UInt32 displayWinStartY,
                                    UInt32 displayWinWidth,
                                    UInt32 displayWinHeight
                                    )
    {
        pPrm->displayId = displayID;
        pPrm->rtParams.posX = displayWinStartX;
        pPrm->rtParams.posY = displayWinStartY;
        pPrm->rtParams.tarWidth  = displayWinWidth;
        pPrm->rtParams.tarHeight = displayWinHeight;
    }
    
    Void chains_network_integrated_Set_AlgPrms(
    		AlgorithmLink_FrameCopyCreateParams *FrameCopy1,
    		AlgorithmLink_FrameCopyCreateParams *FrameCopy2,
                                            Chains_Ctrl *chainsCfg)
    {
    	FrameCopy1->maxWidth    = ALGORITHM_WIDTH;
    	FrameCopy1->maxHeight   = ALGORITHM_HEIGHT;
    	FrameCopy1->numOutputFrames = 5;
    
    	FrameCopy2->maxWidth    = ALGORITHM_WIDTH;
    	FrameCopy2->maxHeight   = ALGORITHM_HEIGHT;
    	FrameCopy2->numOutputFrames = 5;
    }
    
    Void chains_network_integrated_SetSyncPrm(SyncLink_CreateParams *Sync)
    {
        Sync->syncDelta = 1100;
        Sync->syncThreshold = 11000;
    }
    
    
    Void chains_network_integrated_SetSelectlinkPrms(SelectLink_CreateParams *pPrm)
    {
        pPrm->numOutQue = 2;
    
        pPrm->outQueChInfo[0].outQueId   = 0;
        pPrm->outQueChInfo[0].numOutCh   = 1;
        pPrm->outQueChInfo[0].inChNum[0] = 0;
    
        pPrm->outQueChInfo[1].outQueId   = 1;
        pPrm->outQueChInfo[1].numOutCh   = 1;
        pPrm->outQueChInfo[1].inChNum[0] = 1;
    }
    
    Void chains_network_integrated_Set_DrawPrms( AlgorithmLink_IntegratedDrawCreateParams *OutputDrawParams,
    													 Chains_Ctrl *chainsCfg)
    {
    
    	OutputDrawParams->imgFrameHeight = ALGORITHM_HEIGHT;
    	OutputDrawParams->imgFrameWidth = ALGORITHM_WIDTH;
    	OutputDrawParams->imgFrameStartX = 0;
    	OutputDrawParams->imgFrameStartY = 0;
    	OutputDrawParams->numOutBuffers = 5;
    
    }
    /**
     *******************************************************************************
     *
     * \brief   Set link Parameters
     *
     *          It is called in Create function of the auto generated use-case file.
     *
     * \param pUcObj    [IN] Auto-generated use case object
     * \param appObj    [IN] Application specific object
     *
     *******************************************************************************
    */
    Void chains_network_integrated_SetAppPrms(chains_network_integratedObj *pUcObj, Void *appObj)
    {
        chains_network_integratedAppObj *pObj
            = (chains_network_integratedAppObj*)appObj;
    
        pObj->captureOutWidth  = CAPTURE_SENSOR_WIDTH;
        pObj->captureOutHeight = CAPTURE_SENSOR_HEIGHT;
    
        ChainsCommon_GetDisplayWidthHeight(
            pObj->chainsCfg->displayType,
            &pObj->displayWidth,
            &pObj->displayHeight
            );
    
        chains_network_integrated_SetNullSrcPrms(
            pObj,
            &pUcObj->NullSourcePrm
            );
    
        chains_network_integrated_SetNullPrms(&pUcObj->NullPrm);
    
        chains_network_integrated_SetVpePrm(
                               &pUcObj->VPE_1Prm,
                               &pUcObj->VPE_2Prm,
                               ALGORITHM_WIDTH,
                               ALGORITHM_HEIGHT,
                               pObj->captureOutWidth,
                               pObj->captureOutHeight,
                               SYSTEM_DF_YUV422I_YUYV
                           );
        chains_network_integrated_SetSelectlinkPrms(&pUcObj->Select_algPrm);
    
        ChainsCommon_SetGrpxSrcPrms(&pUcObj->GrpxSrcPrm,
                                                   pObj->displayWidth,
                                                   pObj->displayHeight
                                                  );
    
        ChainsCommon_SetDisplayPrms(NULL,//&pUcObj->Display_algPrm,
                                    &pUcObj->Display_GrpxPrm,
                                    pObj->chainsCfg->displayType,
                                    pObj->displayWidth,
                                    pObj->displayHeight
                                   );
    
    //    pUcObj->Display_VideoPrm.displayId                 = DISPLAY_LINK_INST_DSS_VID1;
    
        chains_network_integrated_Set_AlgPrms(          &pUcObj->Alg_FrameCopy_1Prm,
                									&pUcObj->Alg_FrameCopy_2Prm,
                                                    pObj->chainsCfg);
    
        chains_network_integrated_Set_DrawPrms( &pUcObj->Alg_IntegratedDrawPrm,pObj->chainsCfg);
    
        chains_network_integrated_SetSyncPrm(       &pUcObj->Sync_algPrm);
    #ifdef KPIT_MODIFICATIONS
        pUcObj->Display_VideoPrm.rtParams.tarWidth = ALGORITHM_WIDTH;
        pUcObj->Display_VideoPrm.rtParams.tarHeight = ALGORITHM_HEIGHT;
    
        //Swapnil: Assertion when Image Width/height more than Display Height/Width
        UTILS_assert(pUcObj->Display_VideoPrm.rtParams.tarWidth <= pObj->displayWidth);
        UTILS_assert(pUcObj->Display_VideoPrm.rtParams.tarHeight <= pObj->displayHeight);
    
        //Swapnil: To Place the Frame at centre of display.Calculate Start PosX and Y based on Display and Frame Width /Height.
        pUcObj->Display_VideoPrm.rtParams.posX = (pObj->displayWidth >> 1) - (ALGORITHM_WIDTH >>1);
        pUcObj->Display_VideoPrm.rtParams.posY = (pObj->displayHeight >> 1) - (ALGORITHM_HEIGHT >>1);
    
        pUcObj->GrpxSrcPrm.logoDisplayEnable = FALSE;
    
    #endif
        ChainsCommon_StartDisplayCtrl(
            pObj->chainsCfg->displayType,
            pObj->displayWidth,
            pObj->displayHeight
            );
    
    }
    
    /**
     *******************************************************************************
     *
     * \brief   Start the Multiple Algorithm Demonstration Links
     *
     *          Function sends a control command to Null Source, Algorithm and display link to
     *          to Start all the required links . Links are started in reverce
     *          order as information of next link is required to connect.
     *          System_linkStart is called with LinkId to start the links.
     *
     * \param   pObj  [IN] chains_network_integratedAppObj
     *
     * \return  SYSTEM_LINK_STATUS_SOK on success
     *
     *******************************************************************************
    */
    Void chains_network_integrated_StartApp(chains_network_integratedAppObj *pObj)
    {
    
        Chains_memPrintHeapStatus();
    
        ChainsCommon_StartDisplayDevice(pObj->chainsCfg->displayType);
    
        chains_network_integrated_Start(&pObj->ucObj);
    
    
        Chains_prfLoadCalcEnable(TRUE, FALSE, FALSE);
    }
    
    /**
     *******************************************************************************
     *
     * \brief   Delete the Multiple Algorithm Demonstration Links
     *
     *          Function sends a control command to Null Source, Algorithm and display link to
     *          to delete all the prior created links
     *          System_linkDelete is called with LinkId to delete the links.
     *
     * \param   pObj   [IN]   chains_network_integratedAppObj
     *
     *******************************************************************************
    */
    Void chains_network_integrated_StopAndDeleteApp(chains_network_integratedAppObj *pObj)
    {
        chains_network_integrated_Stop(&pObj->ucObj);
        chains_network_integrated_Delete(&pObj->ucObj);
    
        ChainsCommon_StopDisplayCtrl();
        ChainsCommon_StopDisplayDevice(pObj->chainsCfg->displayType);
    
        /* Print the HWI, SWI and all tasks load */
        /* Reset the accumulated timer ticks */
        Chains_prfLoadCalcEnable(FALSE, TRUE, TRUE);
    }
    
    /**
     *******************************************************************************
     *
     * \brief   Multiple Algorithm Demonstration Usecase
     *
     *          This functions executes the create, start functions
     *
     *          Further in a while loop displays run time menu and waits
     *          for user inputs to print the statistics or to end the demo.
     *
     *          Once the user inputs end of demo stop and delete
     *          functions are executed.
     *
     * \param   chainsCfg       [IN]   Chains_Ctrl
     *
     *******************************************************************************
    */
    Void chains_network_integrated(Chains_Ctrl *chainsCfg)
    {
        char ch;
        UInt32 done = FALSE;
        chains_network_integratedAppObj chainsObj;
    
        chainsObj.chainsCfg = chainsCfg;
    
        chains_network_integrated_Create(&chainsObj.ucObj, &chainsObj);
    
        chains_network_integrated_StartApp(&chainsObj);
    
        chainsObj.displayActiveChId = 0;
        while(!done)
        {
            ch = Chains_menuRunTime();
    
            switch(ch)
            {
                case '0':
                    done = TRUE;
                    break;
                case 'p':
                case 'P':
                    chains_network_integrated_printStatistics(&chainsObj.ucObj);
                    ChainsCommon_PrintStatistics();
                    break;
                default:
                    Vps_printf("\nUnsupported option '%c'. Please try again\n", ch);
                    break;
            }
        }
    
        chains_network_integrated_StopAndDeleteApp(&chainsObj);
    }
    
    
    Socrates

  • Hi Sujith,

    We also tried printing create time parameters in VPE link.

    Here is the log:

    [IPU1-0]     29.734673 s: VPE: OUT0: CH 0: Frame 0: 0x8f08b000, 0x8f08b000, 640 x 400

    [IPU1-0]     29.734856 s: VPE: OUT0: CH 0: Frame 1: 0x8f108000, 0x8f108000, 640 x 400

    [IPU1-0]     29.734978 s: VPE: OUT0: CH 0: Frame 2: 0x8f185000, 0x8f185000, 640 x 400

    [IPU1-0]     29.735100 s: VPE: OUT0: CH 0: Frame 3: 0x8f202000, 0x8f202000, 640 x 400

    [IPU1-0]     29.735252 s: VPE: OUT0: CH 0: Frame 4: 0x8f27f000, 0x8f27f000, 640 x 400

    [IPU1-0]     29.773409 s: VPE: OUT0: CH 1: Frame 0: 0x8f2fc000, 0x8f2fc000, 640 x 400

    [IPU1-0]     29.773592 s: VPE: OUT0: CH 1: Frame 1: 0x8f379000, 0x8f379000, 640 x 400

    [IPU1-0]     29.773775 s: VPE: OUT0: CH 1: Frame 2: 0x8f3f6000, 0x8f3f6000, 640 x 400

    [IPU1-0]     29.773897 s: VPE: OUT0: CH 1: Frame 3: 0x8f473000, 0x8f473000, 640 x 400

    [IPU1-0]     29.774019 s: VPE: OUT0: CH 1: Frame 4: 0x8f4f0000, 0x8f4f0000, 640 x 400

     

    Regards

    Socrates

  • Hi Socrates,

    The arguments seem fine. Can you please check the VPE is actually scaling it in-correctly. Please follow the steps below

    1. Build in debug mode, in vision_sdk prompt
    rm -rf ./binaries/
    make -s -j PROFILE=debug depend
    make -s -j PROFILE=debug
    2. Use CCS to load executable for all required core
    3. In IPU_0
    4. Put a break point in function VpeLink_drvReleaseFrames () in VPE Link
    5. run the usecase
    6. Once this function hits, step through and come to instruction pBuf = pFrame->appData;
    7. Copy the 32 bit address of luma from "pFrame->addr[0][0]"
    8. Goto scripting console of CCS (CCS Menu -> View -> Scripting Console)
    9. In the command below replace AAAAAAAA with the 32 bit address that you have copied
    "saveRaw(0, 0xAAAAAAAA, "C:\\VPE_YUV422_1280_720_B_0.yuv", 128000, 32, false)"
    10. Paste this command in the console, ensure that you have pasted correct address.
    11. Use any YUV viewer to check the output or post in the forum.

    Regards,
    Sujith
  • Hi Sujith,

    Please find attached VPE Out files as requested.

    Lower half of the channel 2 output is still corrupted.

    Regards

    Socrateshttps://e2e.ti.com/cfs-file/__key/communityserver-discussions-components-files/791/4530.VPEOut.7z

     

  • Hi Socrates,

    Can you please check the input to VPE, it seems like VPE output is 640x400 for both the channels.
    i.e. Put a break point in In function VpeLink_drvReleaseFrames () and run upto "for (frameId = 0x0U; frameId < pReqObj->inFrameListN.numFrames; frameId++)"

    Once pFrame is updated with the input frame, please dump frame pointed by pFrame->addr[0][0]

    Regards,
    Sujith
  • Hi Sujith,
    This is Siddique, working with Socrates.

    As suggested we had put a break point in function VpeLink_drvReleaseFrames() and tried to run till "(frameId = 0x0U; frameId < pReqObj->inFrameListN.numFrames; frameId++)" but the control wasn't coming to that particular line, this line was under a condition "if(pObj->useOverridePrevFldBuf)" and the value of useOverridePrevFldBuf was zero, we made the value forcefully to one and then dumped both input channel values, both the input frames are found to be OK.


    Regards,
    Siddique
  • Hi Siddique,

    OK, can you please check if the width/heights are not actually changing in the SC registers. Please follow steps below

    1. Use CCS to load and run the usecase
    2. From IPU1_C0, open a memory browser (From View tab, choose view memory browser)
    3. Please look at address 0x489D 0710 & 0x489D 0714
      1. Put memory window in continuous refresh mode (or refresh manually), while the usecase is running
    4. Also, please look at address 0x489D 0708 & 0x489D 070C in continuous refresh mode (or manually refresh)
    5. Share the values of these registers

    Regards,

    Sujith