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.

pnc rdk 3.5 how to scale stream from 2592x2128 to 1920x1080 ?

Other Parts Discussed in Thread: TVP5158

pnc rdk 3.5 how to scale stream from 2592x2128 to 1920x1080 ?

ipnc rdk 3.5 , 8148 board,

scale stream from 2592x2128 to 1920x1080 ;

I use resize!

Isp hunged up after the message printed " ISP   : Received and returning 1 frames ".


my usecase

    ispPrm.vnfFullResolution = FALSE;
    ispPrm.clkDivM                     = 10;
    ispPrm.clkDivN                    = 20;//20
    ispPrm.vsEnable = FALSE;

    ispPrm.inQueParams.prevLinkId     = dupId;
    ispPrm.inQueParams.prevLinkQueId = 1;

    ispPrm.numOutQueue               = 1;
    ispPrm.outQueInfo[0].nextLink = mergeId;
    ispPrm.outQueuePrm[0].dataFormat = SYSTEM_DF_YUV420SP_UV;
    ispPrm.outQueuePrm[0].width      = 800;
    ispPrm.outQueuePrm[0].height     = 600;

  • Hello,

    I am not familiar with IPNC.
    It seems that the  SCLR cannot scale high MP stream. It can handle up to 1920x1080 resolution.
    The next release support a new link called mpsclr, which could be used to scale down high MP streams to 1920X1080.
    Or you could try to use ISS to resize it to 1920x1080.

    Best Regards,
    Margarita

  • thanks for your answer.

    how to use iss to resize stream ?
    can you give me some suggestion about iss to resize ?
  • Hello,

    As I said I am not very familiar with IPNC, I will try to involve someone to confirm this and to give you suggestions how to archive it.

    Best Regards,
    Margarita
  • thanks again for you done.

    waiting the answer.

    regards.
  • Hi,

     

    Can you tell me your use case?

    Are you trying to resize the RAW data?

     

    regards,

    Anand

     

  • I captured stream from vin0 portA use capturelink .
    stream resolution is 2592x2128 yuv422p. I want resizer to resize it 1920x1080.

    I don't know how to do?

    usecase
    #define GET_FRAME_FROM_VIP0PORTA  (1)

    #if GET_FRAME_FROM_VIP0PORTA

    static SystemVideo_Ivahd2ChMap_Tbl systemVid_encDecIvaChMapTbl = {
        .isPopulated = 1,
        .ivaMap[0] = {
                      .EncNumCh  = 4,
                      .EncChList = {0, 1, 2, 3},
                      .DecNumCh = 0,
                      .DecChList = {0, 0},
                      },
        .ivaMap[1] = {
                      .EncNumCh = 4,
                      .EncChList = {4, 5, 6, 7 },
                      .DecNumCh = 0,
                      .DecChList = {0, 0},
                      },

    };
    Int32 multich_create_uw_fullftr()
    {
        Int32 i;
        // VPSS ---->A8
        //A8--->c674
        System_LinkInfo framesProducerLinkInfo;

        //A8--->VIDEO
        CaptureLink_CreateParams capPrm;

        UInt32 dupId;
        DupLink_CreateParams  dupPrm;

        UInt32 ispId;
        IspLink_CreateParams  ispPrm;

        UInt32 mergeId;
        MergeLink_CreateParams mergePrm;
        //VPSS ---->A8
        IpcFramesOutLinkRTOS_CreateParams ipcFramesOutVpssToHostPrm;
        IpcFramesInLinkHLOS_CreateParams ipcFramesInHostPrm;
        //A8--->M3Video
        UInt32 ipcInVideoFrameId;

        IpcFramesOutLinkHLOS_CreateParams  ipcFramesOutHostPrm;
        IpcFramesInLinkRTOS_CreateParams   ipcFramesInVideoFromHostPrm;

        EncLink_CreateParams encPrm;
        //M3Video --->A8
        IpcBitsOutLinkRTOS_CreateParams ipcBitsOutVideoToHostPrm;
        IpcBitsInLinkHLOS_CreateParams ipcBitsInHostPrm;

        CaptureLink_VipInstParams *pCapInstPrm;
        CaptureLink_OutParams *pCapOutPrm;

        /* IPC struct init */
        MULTICH_INIT_STRUCT(IpcFramesOutLinkRTOS_CreateParams, ipcFramesOutVpssToHostPrm);
        MULTICH_INIT_STRUCT(IpcFramesInLinkHLOS_CreateParams, ipcFramesInHostPrm);
        MULTICH_INIT_STRUCT(IpcFramesOutLinkHLOS_CreateParams, ipcFramesOutHostPrm);
        MULTICH_INIT_STRUCT(IpcFramesInLinkRTOS_CreateParams,  ipcFramesInVideoFromHostPrm);

        MULTICH_INIT_STRUCT(IpcBitsOutLinkRTOS_CreateParams, ipcBitsOutVideoToHostPrm);
        MULTICH_INIT_STRUCT(IpcBitsInLinkHLOS_CreateParams, ipcBitsInHostPrm);

        //MULTICH_INIT_STRUCT(DeiLink_CreateParams, deiPrm);
    //    MULTICH_INIT_STRUCT(CaptureLink_CreateParams, capPrm);

        //System_init();
        MultiCh_detectBoard();
        System_linkControl(SYSTEM_LINK_ID_M3VPSS, SYSTEM_M3VPSS_CMD_RESET_VIDEO_DEVICES, NULL, 0, TRUE);
        System_linkControl(SYSTEM_LINK_ID_M3VIDEO, SYSTEM_COMMON_CMD_SET_CH2IVAHD_MAP_TBL,
                           &systemVid_encDecIvaChMapTbl, sizeof(SystemVideo_Ivahd2ChMap_Tbl), TRUE);


        gVcapModuleContext.captureId = SYSTEM_LINK_ID_CAPTURE;
        dupId  =     SYSTEM_VPSS_LINK_ID_DUP_0;
        ispId = SYSTEM_LINK_ID_ISP_0;
        mergeId = SYSTEM_VPSS_LINK_ID_MERGE_0;

        gVcamModuleContext.ipcFramesOutVpssToHostId  = SYSTEM_VPSS_LINK_ID_IPC_FRAMES_OUT_0;
        gVcamModuleContext.ipcFramesInHostId = SYSTEM_HOST_LINK_ID_IPC_FRAMES_IN_0;
        gVcamModuleContext.ipcFramesOutHostId = SYSTEM_HOST_LINK_ID_IPC_FRAMES_OUT_0;
        gMjpegModuleContext.mjpepEncId = SYSTEM_LINK_ID_MJPEG;

        ipcInVideoFrameId = SYSTEM_VIDEO_LINK_ID_IPC_FRAMES_IN_0;

        gVencModuleContext.encId = SYSTEM_LINK_ID_VENC_0;

        gVencModuleContext.ipcBitsOutRTOSId = SYSTEM_VIDEO_LINK_ID_IPC_BITS_OUT_0;
        gVencModuleContext.ipcBitsInHLOSId = SYSTEM_HOST_LINK_ID_IPC_BITS_IN_0;

        /* Camera Link params */
        CaptureLink_CreateParams_Init(&capPrm);


        /* This is for TVP5158 Audio Channels - Change it to 16 if there are 16
         * audio channels connected in cascade */
        capPrm.numVipInst = 1;
        capPrm.tilerEnable = FALSE;
        capPrm.numBufsPerCh = 6;
        capPrm.numExtraBufs = 0;
        capPrm.numAudioChannels= 0;
        capPrm.fakeHdMode = FALSE;
        capPrm.isPalMode=FALSE;
        capPrm.enableSdCrop=FALSE;
        capPrm.doCropInCapture=FALSE;
        capPrm.outQueParams[0].nextLink  = dupId;

        pCapInstPrm                     = &capPrm.vipInst[0];
        pCapInstPrm->vipInstId          = SYSTEM_CAPTURE_INST_VIP0_PORTA;
        pCapInstPrm->inDataFormat       = SYSTEM_DF_YUV422P;
        pCapInstPrm->standard           = SYSTEM_STD_5MP_2560_1920;//SYSTEM_STD_5MP_2560_1920;// SYSTEM_STD_1080P_30;
        pCapInstPrm->numOutput          = 1;

        //
        pCapOutPrm                      = &pCapInstPrm->outParams[0];
        pCapOutPrm->dataFormat          = SYSTEM_DF_YUV420SP_UV;
        pCapOutPrm->scEnable            = FALSE;
        pCapOutPrm->scOutWidth          = 2592;//uw_ch_width;
        pCapOutPrm->scOutHeight         = 2128;//uw_ch_height;
        pCapOutPrm->outQueId          = 0;

    //    pCapOutPrm->scOutWidth = gUI_mcfw_config.stcap.stchl_cap[0].iwidth;
    //    pCapOutPrm->scOutHeight = gUI_mcfw_config.stcap.stchl_cap[0].iheight;

        dupPrm.inQueParams.prevLinkId    = gVcapModuleContext.captureId;
        dupPrm.inQueParams.prevLinkQueId = 0;
        dupPrm.numOutQue                 = 2;
        dupPrm.outQueParams[0].nextLink  = mergeId;
        dupPrm.outQueParams[1].nextLink  = ispId;

        ispPrm.vnfFullResolution = FALSE;
        ispPrm.clkDivM                     = 10;
        ispPrm.clkDivN                    = 20;//20
        ispPrm.vsEnable = FALSE;

        ispPrm.inQueParams.prevLinkId     = dupId;
        ispPrm.inQueParams.prevLinkQueId = 1;

        ispPrm.numOutQueue               = 1;
        ispPrm.outQueInfo[0].nextLink = mergeId;
        ispPrm.outQueuePrm[0].dataFormat = SYSTEM_DF_YUV420SP_UV;
        ispPrm.outQueuePrm[0].width      = 1920;
        ispPrm.outQueuePrm[0].height     = 1080;

        mergePrm.numInQue = 2;
        mergePrm.inQueParams[0].prevLinkId = dupId;
        mergePrm.inQueParams[0].prevLinkQueId = 0;
        mergePrm.inQueParams[1].prevLinkId = ispId;
        mergePrm.inQueParams[1].prevLinkQueId = 0;
        mergePrm.outQueParams.nextLink = gVcamModuleContext.ipcFramesOutVpssToHostId;
        mergePrm.notifyNextLink = TRUE;

        //set Frames out vpss to host link info
        ipcFramesOutVpssToHostPrm.baseCreateParams.noNotifyMode = TRUE;
        ipcFramesOutVpssToHostPrm.baseCreateParams.notifyNextLink = FALSE;
        ipcFramesOutVpssToHostPrm.baseCreateParams.notifyPrevLink = TRUE;
        ipcFramesOutVpssToHostPrm.baseCreateParams.inQueParams.prevLinkId =  mergeId;
        ipcFramesOutVpssToHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
        ipcFramesOutVpssToHostPrm.baseCreateParams.outQueParams[0].nextLink = gVcamModuleContext.ipcFramesInHostId;
        ipcFramesOutVpssToHostPrm.baseCreateParams.numOutQue=1;
        ipcFramesOutVpssToHostPrm.baseCreateParams.notifyProcessLink=FALSE;

        ipcFramesInHostPrm.baseCreateParams.noNotifyMode = TRUE;
        ipcFramesInHostPrm.baseCreateParams.notifyNextLink = FALSE;
        ipcFramesInHostPrm.baseCreateParams.notifyPrevLink = FALSE;//TRUE;
        ipcFramesInHostPrm.baseCreateParams.inQueParams.prevLinkId = gVcamModuleContext.ipcFramesOutVpssToHostId;
        ipcFramesInHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
        ipcFramesInHostPrm.baseCreateParams.outQueParams[0].nextLink = SYSTEM_LINK_ID_INVALID;;
        ipcFramesInHostPrm.baseCreateParams.numOutQue = 1;
        ipcFramesInHostPrm.exportOnlyPhyAddr = TRUE;

        ipcFramesInHostPrm.cbCtx = &gVcamModuleContext;
        ipcFramesInHostPrm.cbFxn = Vcam_ipcFramesInCbFxn;

        //A8 Frames to M3Video set
        ipcFramesOutHostPrm.baseCreateParams.noNotifyMode = TRUE;
        ipcFramesOutHostPrm.baseCreateParams.notifyNextLink = TRUE;
        ipcFramesOutHostPrm.baseCreateParams.notifyPrevLink = FALSE;
        ipcFramesOutHostPrm.baseCreateParams.numOutQue = 1;
        ipcFramesOutHostPrm.baseCreateParams.inQueParams.prevLinkId = SYSTEM_LINK_ID_INVALID;
        ipcFramesOutHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
        ipcFramesOutHostPrm.baseCreateParams.outQueParams[0].nextLink = ipcInVideoFrameId;
        //SetIpcFramesOutInQueInfo(&ipcFramesOutHostPrm.inQueInfo);

        ipcFramesInVideoFromHostPrm.baseCreateParams.noNotifyMode = TRUE;
        ipcFramesInVideoFromHostPrm.baseCreateParams.notifyNextLink = TRUE;
        ipcFramesInVideoFromHostPrm.baseCreateParams.notifyPrevLink = FALSE;
        //ipcFramesInVideoFromHostPrm.baseCreateParams.noNotifyMode = FALSE;
        //ipcFramesInVideoFromHostPrm.baseCreateParams.notifyNextLink = TRUE;
        //ipcFramesInVideoFromHostPrm.baseCreateParams.notifyPrevLink = TRUE;
        ipcFramesInVideoFromHostPrm.baseCreateParams.numOutQue = 1;
        ipcFramesInVideoFromHostPrm.baseCreateParams.inQueParams.prevLinkId = gVcamModuleContext.ipcFramesOutHostId;
        ipcFramesInVideoFromHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
        ipcFramesInVideoFromHostPrm.baseCreateParams.outQueParams[0].nextLink = gVencModuleContext.encId;

        // init encode params
        /* Video Encoder Link params */
        MULTICH_INIT_STRUCT(EncLink_CreateParams, encPrm);
        {
            encPrm.numBufPerCh[0] = 6; //D1
            encPrm.numBufPerCh[1] = 6; //CIF]]

            EncLink_ChCreateParams *pLinkChPrm;
            EncLink_ChDynamicParams *pLinkDynPrm;
            VENC_CHN_DYNAMIC_PARAM_S *pDynPrm;
            VENC_CHN_PARAMS_S *pChPrm;

            for (i = 0; i < VENC_PRIMARY_CHANNELS; i++)
            {
                pLinkChPrm  = &encPrm.chCreateParams[i];
                pLinkDynPrm = &pLinkChPrm->defaultDynamicParams;

                pChPrm      = &gVencModuleContext.vencConfig.encChannelParams[i];
                pDynPrm     = &pChPrm->dynamicParam;

                pLinkChPrm->format = IVIDEO_H264HP;

                pLinkChPrm->profile                 = gVencModuleContext.vencConfig.h264Profile[i];
                pLinkChPrm->dataLayout              = IVIDEO_PROGRESSIVE;
                pLinkChPrm->fieldMergeEncodeEnable  = FALSE;
                pLinkChPrm->enableAnalyticinfo      = pChPrm->enableAnalyticinfo;
                pLinkChPrm->maxBitRate              = pChPrm->maxBitRate;
                pLinkChPrm->encodingPreset          = pChPrm->encodingPreset;
                pLinkChPrm->rateControlPreset       = IVIDEO_USER_DEFINED; //pChPrm->rcType;
                pLinkChPrm->enableHighSpeed         = FALSE;
                pLinkChPrm->enableWaterMarking      = pChPrm->enableWaterMarking;
                pLinkChPrm->StreamPreset            = gUI_mcfw_config.StreamPreset[i];

        //gUI_mcfw_config.stcap.stchl_enc[0].ikeyframe_interval;
        //gUI_mcfw_config.stcap.stchl_enc[0].itarget_bitrate;
        //gUI_mcfw_config.stcap.stchl_enc[0].imax_bitrate    ;
        //gUI_mcfw_config.stcap.stchl_enc[0].iquality;
                pLinkDynPrm->intraFrameInterval     = 30;//pDynPrm->intraFrameInterval;
                pLinkDynPrm->targetBitRate          = 1000*1000;//pDynPrm->targetBitRate;
                pLinkDynPrm->interFrameInterval     = 1;
                pLinkDynPrm->mvAccuracy             = IVIDENC2_MOTIONVECTOR_QUARTERPEL;
    //            pLinkDynPrm->inputFrameRate         = 60;//pDynPrm->inputFrameRate;
                pLinkDynPrm->rcAlg                  = pDynPrm->rcAlg;
                if( i==0 )
                {
                pLinkDynPrm->qpMin                  = 9;//pDynPrm->qpMin;
                pLinkDynPrm->qpMax                  = 20;//pDynPrm->qpMax;
                pLinkDynPrm->qpInit                 = 10;//pDynPrm->qpInit;
                }
                else
                {
                pLinkDynPrm->qpMin                  = pDynPrm->qpMin;
                pLinkDynPrm->qpMax                  = pDynPrm->qpMax;
                pLinkDynPrm->qpInit                 = pDynPrm->qpInit;
                }
                pLinkDynPrm->vbrDuration            = pDynPrm->vbrDuration;
                pLinkDynPrm->vbrSensitivity         = pDynPrm->vbrSensitivity;

    //            encPrm.numBufPerCh[i] = 4;
    //            gVencModuleContext.encFormat[i] = pLinkChPrm->format;
            }
        }

        /* Video Encoder Framerate */
       // encPrm.chCreateParams[0].defaultDynamicParams.interFrameInterval    = 0;
        encPrm.chCreateParams[0].defaultDynamicParams.inputFrameRate = 30;
        encPrm.chCreateParams[1].defaultDynamicParams.inputFrameRate = 30;
        encPrm.vsEnable = 0;//gUI_mcfw_config.vsEnable;
        encPrm.isVaUseCase = 0;
        for (i =0 ; i < 1; i++)
        {
            encPrm.chCreateParams[i].format = IVIDEO_MJPEG;
            encPrm.chCreateParams[i].profile = 0;
            encPrm.chCreateParams[i].dataLayout = IVIDEO_PROGRESSIVE;
            encPrm.chCreateParams[i].fieldMergeEncodeEnable = FALSE;
            encPrm.chCreateParams[i].defaultDynamicParams.intraFrameInterval = 30;
            encPrm.chCreateParams[i].encodingPreset = 0;
            encPrm.chCreateParams[i].enableAnalyticinfo = 0;
            encPrm.chCreateParams[i].enableWaterMarking = 0;
    //        encPrm.chCreateParams[i].defaultDynamicParams.inputFrameRate = 25;
            encPrm.chCreateParams[i].rateControlPreset = 0;
            encPrm.chCreateParams[i].defaultDynamicParams.targetBitRate = 1000 * 1000;
            encPrm.chCreateParams[i].defaultDynamicParams.interFrameInterval = 1;
            encPrm.chCreateParams[i].defaultDynamicParams.mvAccuracy = 0;
        }

        encPrm.inQueParams.prevLinkId = ipcInVideoFrameId;
        encPrm.inQueParams.prevLinkQueId = 0;
        encPrm.outQueParams.nextLink = gVencModuleContext.ipcBitsOutRTOSId;

        /* IPC Bits Out VIDEO Link params */
        ipcBitsOutVideoToHostPrm.baseCreateParams.noNotifyMode = TRUE;//FALSE;
        ipcBitsOutVideoToHostPrm.baseCreateParams.notifyNextLink = FALSE;
        ipcBitsOutVideoToHostPrm.baseCreateParams.notifyPrevLink = FALSE;
        ipcBitsOutVideoToHostPrm.baseCreateParams.inQueParams.prevLinkId = gVencModuleContext.encId;
        ipcBitsOutVideoToHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
        ipcBitsOutVideoToHostPrm.baseCreateParams.numOutQue = 1;
        ipcBitsOutVideoToHostPrm.baseCreateParams.outQueParams[0].nextLink = gVencModuleContext.ipcBitsInHLOSId;
        MultiCh_ipcBitsInitCreateParams_BitsOutRTOS(&ipcBitsOutVideoToHostPrm, TRUE);

        /* IPC Bits In HOST Link params */
        ipcBitsInHostPrm.baseCreateParams.noNotifyMode = TRUE;
        ipcBitsInHostPrm.baseCreateParams.notifyNextLink = FALSE;
        ipcBitsInHostPrm.baseCreateParams.notifyPrevLink = FALSE;
        ipcBitsInHostPrm.baseCreateParams.inQueParams.prevLinkId = gVencModuleContext.ipcBitsOutRTOSId;
        ipcBitsInHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
        MultiCh_ipcBitsInitCreateParams_BitsInHLOS(&ipcBitsInHostPrm);

        /* Links Creation */
        /* Camera Link */
        System_linkCreate (gVcapModuleContext.captureId, &capPrm, sizeof(capPrm));
        //dup link
        System_linkCreate (dupId, &dupPrm, sizeof(dupPrm));
        //isp
        System_linkCreate (ispId, &ispPrm, sizeof(ispPrm));
        /* Merge Link */
        System_linkCreate(mergeId, &mergePrm, sizeof(mergePrm));

        //out yuv 420 1080P to A8
        System_linkCreate(gVcamModuleContext.ipcFramesOutVpssToHostId, &ipcFramesOutVpssToHostPrm, sizeof(ipcFramesOutVpssToHostPrm));
        System_linkCreate(gVcamModuleContext.ipcFramesInHostId, &ipcFramesInHostPrm, sizeof(ipcFramesInHostPrm));

        System_linkGetInfo(gVcamModuleContext.ipcFramesInHostId,&framesProducerLinkInfo);
        OSA_assert(framesProducerLinkInfo.numQue == 1);
        ipcFramesOutHostPrm.inQueInfo = framesProducerLinkInfo.queInfo[0];
        //A8 out yuv420 to M3Video
        System_linkCreate(gVcamModuleContext.ipcFramesOutHostId, &ipcFramesOutHostPrm, sizeof(ipcFramesOutHostPrm));
        System_linkCreate(ipcInVideoFrameId, &ipcFramesInVideoFromHostPrm, sizeof(ipcFramesInVideoFromHostPrm));
        // Video Encoder Link
        System_linkCreate(gVencModuleContext.encId, &encPrm, sizeof(encPrm));

        //M3Video to A8
        System_linkCreate(gVencModuleContext.ipcBitsOutRTOSId, &ipcBitsOutVideoToHostPrm, sizeof(ipcBitsOutVideoToHostPrm));
        System_linkCreate(gVencModuleContext.ipcBitsInHLOSId, &ipcBitsInHostPrm, sizeof(ipcBitsInHostPrm));
        return 0;
    }


    Int32 multich_start_uw_fullftr()
    {
        UInt32 mergeId;
        UInt32 ipcInVideoFrameId;
        UInt32 ispId;
        UInt32 dupId;

        mergeId = SYSTEM_VPSS_LINK_ID_MERGE_0;
        ipcInVideoFrameId = SYSTEM_VIDEO_LINK_ID_IPC_FRAMES_IN_0;
        dupId  =     SYSTEM_VPSS_LINK_ID_DUP_0;
        ispId = SYSTEM_LINK_ID_ISP_0;
        //start Links
        System_linkStart(gVencModuleContext.ipcBitsInHLOSId);
        System_linkStart(gVencModuleContext.ipcBitsOutRTOSId);
        System_linkStart(gVencModuleContext.encId);
        System_linkStart(ipcInVideoFrameId);

        System_linkStart(gVcamModuleContext.ipcFramesOutHostId);
        System_linkStart(gVcamModuleContext.ipcFramesInHostId);
        System_linkStart(gVcamModuleContext.ipcFramesOutVpssToHostId);

        System_linkStart(mergeId);

        System_linkStart(ispId);

        System_linkStart(dupId);

        System_linkStart(gVcapModuleContext.captureId);

        return 0;

    }

  • my usecase
    Int32 multich_create_uw_fullftr()
    {
    Int32 i;
    // VPSS ---->A8
    //A8--->c674
    System_LinkInfo framesProducerLinkInfo;

    //A8--->VIDEO
    CaptureLink_CreateParams capPrm;

    UInt32 dupId;
    DupLink_CreateParams dupPrm;

    UInt32 ispId;
    IspLink_CreateParams ispPrm;

    UInt32 mergeId;
    MergeLink_CreateParams mergePrm;
    //VPSS ---->A8
    IpcFramesOutLinkRTOS_CreateParams ipcFramesOutVpssToHostPrm;
    IpcFramesInLinkHLOS_CreateParams ipcFramesInHostPrm;
    //A8--->M3Video
    UInt32 ipcInVideoFrameId;

    IpcFramesOutLinkHLOS_CreateParams ipcFramesOutHostPrm;
    IpcFramesInLinkRTOS_CreateParams ipcFramesInVideoFromHostPrm;

    EncLink_CreateParams encPrm;
    //M3Video --->A8
    IpcBitsOutLinkRTOS_CreateParams ipcBitsOutVideoToHostPrm;
    IpcBitsInLinkHLOS_CreateParams ipcBitsInHostPrm;

    CaptureLink_VipInstParams *pCapInstPrm;
    CaptureLink_OutParams *pCapOutPrm;

    /* IPC struct init */
    MULTICH_INIT_STRUCT(IpcFramesOutLinkRTOS_CreateParams, ipcFramesOutVpssToHostPrm);
    MULTICH_INIT_STRUCT(IpcFramesInLinkHLOS_CreateParams, ipcFramesInHostPrm);
    MULTICH_INIT_STRUCT(IpcFramesOutLinkHLOS_CreateParams, ipcFramesOutHostPrm);
    MULTICH_INIT_STRUCT(IpcFramesInLinkRTOS_CreateParams, ipcFramesInVideoFromHostPrm);

    MULTICH_INIT_STRUCT(IpcBitsOutLinkRTOS_CreateParams, ipcBitsOutVideoToHostPrm);
    MULTICH_INIT_STRUCT(IpcBitsInLinkHLOS_CreateParams, ipcBitsInHostPrm);

    //MULTICH_INIT_STRUCT(DeiLink_CreateParams, deiPrm);
    // MULTICH_INIT_STRUCT(CaptureLink_CreateParams, capPrm);

    //System_init();
    MultiCh_detectBoard();
    System_linkControl(SYSTEM_LINK_ID_M3VPSS, SYSTEM_M3VPSS_CMD_RESET_VIDEO_DEVICES, NULL, 0, TRUE);
    System_linkControl(SYSTEM_LINK_ID_M3VIDEO, SYSTEM_COMMON_CMD_SET_CH2IVAHD_MAP_TBL,
    &systemVid_encDecIvaChMapTbl, sizeof(SystemVideo_Ivahd2ChMap_Tbl), TRUE);


    gVcapModuleContext.captureId = SYSTEM_LINK_ID_CAPTURE;
    dupId = SYSTEM_VPSS_LINK_ID_DUP_0;
    ispId = SYSTEM_LINK_ID_ISP_0;
    mergeId = SYSTEM_VPSS_LINK_ID_MERGE_0;

    gVcamModuleContext.ipcFramesOutVpssToHostId = SYSTEM_VPSS_LINK_ID_IPC_FRAMES_OUT_0;
    gVcamModuleContext.ipcFramesInHostId = SYSTEM_HOST_LINK_ID_IPC_FRAMES_IN_0;
    gVcamModuleContext.ipcFramesOutHostId = SYSTEM_HOST_LINK_ID_IPC_FRAMES_OUT_0;
    gMjpegModuleContext.mjpepEncId = SYSTEM_LINK_ID_MJPEG;

    ipcInVideoFrameId = SYSTEM_VIDEO_LINK_ID_IPC_FRAMES_IN_0;

    gVencModuleContext.encId = SYSTEM_LINK_ID_VENC_0;

    gVencModuleContext.ipcBitsOutRTOSId = SYSTEM_VIDEO_LINK_ID_IPC_BITS_OUT_0;
    gVencModuleContext.ipcBitsInHLOSId = SYSTEM_HOST_LINK_ID_IPC_BITS_IN_0;

    /* Camera Link params */
    CaptureLink_CreateParams_Init(&capPrm);


    /* This is for TVP5158 Audio Channels - Change it to 16 if there are 16
    * audio channels connected in cascade */
    capPrm.numVipInst = 1;
    capPrm.tilerEnable = FALSE;
    capPrm.numBufsPerCh = 6;
    capPrm.numExtraBufs = 0;
    capPrm.numAudioChannels= 0;
    capPrm.fakeHdMode = FALSE;
    capPrm.isPalMode=FALSE;
    capPrm.enableSdCrop=FALSE;
    capPrm.doCropInCapture=FALSE;
    capPrm.outQueParams[0].nextLink = dupId;

    pCapInstPrm = &capPrm.vipInst[0];
    pCapInstPrm->vipInstId = SYSTEM_CAPTURE_INST_VIP0_PORTA;
    pCapInstPrm->inDataFormat = SYSTEM_DF_YUV422P;
    pCapInstPrm->standard = SYSTEM_STD_5MP_2560_1920;//SYSTEM_STD_5MP_2560_1920;// SYSTEM_STD_1080P_30;
    pCapInstPrm->numOutput = 1;

    //
    pCapOutPrm = &pCapInstPrm->outParams[0];
    pCapOutPrm->dataFormat = SYSTEM_DF_YUV420SP_UV;
    pCapOutPrm->scEnable = FALSE;
    pCapOutPrm->scOutWidth = 2592;//1920;//uw_ch_width;
    pCapOutPrm->scOutHeight = 2128;//1080;//uw_ch_height;
    pCapOutPrm->outQueId = 0;

    // pCapOutPrm->scOutWidth = gUI_mcfw_config.stcap.stchl_cap[0].iwidth;
    // pCapOutPrm->scOutHeight = gUI_mcfw_config.stcap.stchl_cap[0].iheight;

    dupPrm.inQueParams.prevLinkId = gVcapModuleContext.captureId;
    dupPrm.inQueParams.prevLinkQueId = 0;
    dupPrm.numOutQue = 2;
    dupPrm.outQueParams[0].nextLink = mergeId;
    dupPrm.outQueParams[1].nextLink = ispId;

    ispPrm.vnfFullResolution = FALSE;
    ispPrm.clkDivM = 10;
    ispPrm.clkDivN = 20;//20
    ispPrm.vsEnable = FALSE;

    ispPrm.inQueParams.prevLinkId = dupId;
    ispPrm.inQueParams.prevLinkQueId = 1;

    ispPrm.numOutQueue = 1;
    ispPrm.outQueInfo[0].nextLink = mergeId;
    ispPrm.outQueuePrm[0].dataFormat = SYSTEM_DF_YUV420SP_UV;
    ispPrm.outQueuePrm[0].width = 1920;
    ispPrm.outQueuePrm[0].height = 1080;

    mergePrm.numInQue = 2;
    mergePrm.inQueParams[0].prevLinkId = dupId;
    mergePrm.inQueParams[0].prevLinkQueId = 0;
    mergePrm.inQueParams[1].prevLinkId = ispId;
    mergePrm.inQueParams[1].prevLinkQueId = 0;
    mergePrm.outQueParams.nextLink = gVcamModuleContext.ipcFramesOutVpssToHostId;
    mergePrm.notifyNextLink = TRUE;

    //set Frames out vpss to host link info
    ipcFramesOutVpssToHostPrm.baseCreateParams.noNotifyMode = TRUE;
    ipcFramesOutVpssToHostPrm.baseCreateParams.notifyNextLink = FALSE;
    ipcFramesOutVpssToHostPrm.baseCreateParams.notifyPrevLink = TRUE;
    ipcFramesOutVpssToHostPrm.baseCreateParams.inQueParams.prevLinkId = mergeId;
    ipcFramesOutVpssToHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
    ipcFramesOutVpssToHostPrm.baseCreateParams.outQueParams[0].nextLink = gVcamModuleContext.ipcFramesInHostId;
    ipcFramesOutVpssToHostPrm.baseCreateParams.numOutQue=1;
    ipcFramesOutVpssToHostPrm.baseCreateParams.notifyProcessLink=FALSE;

    ipcFramesInHostPrm.baseCreateParams.noNotifyMode = TRUE;
    ipcFramesInHostPrm.baseCreateParams.notifyNextLink = FALSE;
    ipcFramesInHostPrm.baseCreateParams.notifyPrevLink = FALSE;//TRUE;
    ipcFramesInHostPrm.baseCreateParams.inQueParams.prevLinkId = gVcamModuleContext.ipcFramesOutVpssToHostId;
    ipcFramesInHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
    ipcFramesInHostPrm.baseCreateParams.outQueParams[0].nextLink = SYSTEM_LINK_ID_INVALID;;
    ipcFramesInHostPrm.baseCreateParams.numOutQue = 1;
    ipcFramesInHostPrm.exportOnlyPhyAddr = TRUE;

    ipcFramesInHostPrm.cbCtx = &gVcamModuleContext;
    ipcFramesInHostPrm.cbFxn = Vcam_ipcFramesInCbFxn;

    //A8 Frames to M3Video set
    ipcFramesOutHostPrm.baseCreateParams.noNotifyMode = TRUE;
    ipcFramesOutHostPrm.baseCreateParams.notifyNextLink = TRUE;
    ipcFramesOutHostPrm.baseCreateParams.notifyPrevLink = FALSE;
    ipcFramesOutHostPrm.baseCreateParams.numOutQue = 1;
    ipcFramesOutHostPrm.baseCreateParams.inQueParams.prevLinkId = SYSTEM_LINK_ID_INVALID;
    ipcFramesOutHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
    ipcFramesOutHostPrm.baseCreateParams.outQueParams[0].nextLink = ipcInVideoFrameId;
    //SetIpcFramesOutInQueInfo(&ipcFramesOutHostPrm.inQueInfo);

    ipcFramesInVideoFromHostPrm.baseCreateParams.noNotifyMode = TRUE;
    ipcFramesInVideoFromHostPrm.baseCreateParams.notifyNextLink = TRUE;
    ipcFramesInVideoFromHostPrm.baseCreateParams.notifyPrevLink = FALSE;
    //ipcFramesInVideoFromHostPrm.baseCreateParams.noNotifyMode = FALSE;
    //ipcFramesInVideoFromHostPrm.baseCreateParams.notifyNextLink = TRUE;
    //ipcFramesInVideoFromHostPrm.baseCreateParams.notifyPrevLink = TRUE;
    ipcFramesInVideoFromHostPrm.baseCreateParams.numOutQue = 1;
    ipcFramesInVideoFromHostPrm.baseCreateParams.inQueParams.prevLinkId = gVcamModuleContext.ipcFramesOutHostId;
    ipcFramesInVideoFromHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
    ipcFramesInVideoFromHostPrm.baseCreateParams.outQueParams[0].nextLink = gVencModuleContext.encId;

    // init encode params
    /* Video Encoder Link params */
    MULTICH_INIT_STRUCT(EncLink_CreateParams, encPrm);
    {
    encPrm.numBufPerCh[0] = 6; //D1
    encPrm.numBufPerCh[1] = 6; //CIF]]

    EncLink_ChCreateParams *pLinkChPrm;
    EncLink_ChDynamicParams *pLinkDynPrm;
    VENC_CHN_DYNAMIC_PARAM_S *pDynPrm;
    VENC_CHN_PARAMS_S *pChPrm;

    for (i = 0; i < VENC_PRIMARY_CHANNELS; i++)
    {
    pLinkChPrm = &encPrm.chCreateParams[i];
    pLinkDynPrm = &pLinkChPrm->defaultDynamicParams;

    pChPrm = &gVencModuleContext.vencConfig.encChannelParams[i];
    pDynPrm = &pChPrm->dynamicParam;

    pLinkChPrm->format = IVIDEO_H264HP;

    pLinkChPrm->profile = gVencModuleContext.vencConfig.h264Profile[i];
    pLinkChPrm->dataLayout = IVIDEO_PROGRESSIVE;
    pLinkChPrm->fieldMergeEncodeEnable = FALSE;
    pLinkChPrm->enableAnalyticinfo = pChPrm->enableAnalyticinfo;
    pLinkChPrm->maxBitRate = pChPrm->maxBitRate;
    pLinkChPrm->encodingPreset = pChPrm->encodingPreset;
    pLinkChPrm->rateControlPreset = IVIDEO_USER_DEFINED; //pChPrm->rcType;
    pLinkChPrm->enableHighSpeed = FALSE;
    pLinkChPrm->enableWaterMarking = pChPrm->enableWaterMarking;
    pLinkChPrm->StreamPreset = gUI_mcfw_config.StreamPreset[i];

    //gUI_mcfw_config.stcap.stchl_enc[0].ikeyframe_interval;
    //gUI_mcfw_config.stcap.stchl_enc[0].itarget_bitrate;
    //gUI_mcfw_config.stcap.stchl_enc[0].imax_bitrate ;
    //gUI_mcfw_config.stcap.stchl_enc[0].iquality;
    pLinkDynPrm->intraFrameInterval = 30;//pDynPrm->intraFrameInterval;
    pLinkDynPrm->targetBitRate = 1000*1000;//pDynPrm->targetBitRate;
    pLinkDynPrm->interFrameInterval = 1;
    pLinkDynPrm->mvAccuracy = IVIDENC2_MOTIONVECTOR_QUARTERPEL;
    // pLinkDynPrm->inputFrameRate = 60;//pDynPrm->inputFrameRate;
    pLinkDynPrm->rcAlg = pDynPrm->rcAlg;
    if( i==0 )
    {
    pLinkDynPrm->qpMin = 9;//pDynPrm->qpMin;
    pLinkDynPrm->qpMax = 20;//pDynPrm->qpMax;
    pLinkDynPrm->qpInit = 10;//pDynPrm->qpInit;
    }
    else
    {
    pLinkDynPrm->qpMin = pDynPrm->qpMin;
    pLinkDynPrm->qpMax = pDynPrm->qpMax;
    pLinkDynPrm->qpInit = pDynPrm->qpInit;
    }
    pLinkDynPrm->vbrDuration = pDynPrm->vbrDuration;
    pLinkDynPrm->vbrSensitivity = pDynPrm->vbrSensitivity;

    // encPrm.numBufPerCh[i] = 4;
    // gVencModuleContext.encFormat[i] = pLinkChPrm->format;
    }
    }

    /* Video Encoder Framerate */
    // encPrm.chCreateParams[0].defaultDynamicParams.interFrameInterval = 0;
    encPrm.chCreateParams[0].defaultDynamicParams.inputFrameRate = 30;
    encPrm.chCreateParams[1].defaultDynamicParams.inputFrameRate = 30;
    encPrm.vsEnable = 0;//gUI_mcfw_config.vsEnable;
    encPrm.isVaUseCase = 0;
    for (i =0 ; i < 1; i++)
    {
    encPrm.chCreateParams[i].format = IVIDEO_MJPEG;
    encPrm.chCreateParams[i].profile = 0;
    encPrm.chCreateParams[i].dataLayout = IVIDEO_PROGRESSIVE;
    encPrm.chCreateParams[i].fieldMergeEncodeEnable = FALSE;
    encPrm.chCreateParams[i].defaultDynamicParams.intraFrameInterval = 30;
    encPrm.chCreateParams[i].encodingPreset = 0;
    encPrm.chCreateParams[i].enableAnalyticinfo = 0;
    encPrm.chCreateParams[i].enableWaterMarking = 0;
    // encPrm.chCreateParams[i].defaultDynamicParams.inputFrameRate = 25;
    encPrm.chCreateParams[i].rateControlPreset = 0;
    encPrm.chCreateParams[i].defaultDynamicParams.targetBitRate = 1000 * 1000;
    encPrm.chCreateParams[i].defaultDynamicParams.interFrameInterval = 1;
    encPrm.chCreateParams[i].defaultDynamicParams.mvAccuracy = 0;
    }

    encPrm.inQueParams.prevLinkId = ipcInVideoFrameId;
    encPrm.inQueParams.prevLinkQueId = 0;
    encPrm.outQueParams.nextLink = gVencModuleContext.ipcBitsOutRTOSId;

    /* IPC Bits Out VIDEO Link params */
    ipcBitsOutVideoToHostPrm.baseCreateParams.noNotifyMode = TRUE;//FALSE;
    ipcBitsOutVideoToHostPrm.baseCreateParams.notifyNextLink = FALSE;
    ipcBitsOutVideoToHostPrm.baseCreateParams.notifyPrevLink = FALSE;
    ipcBitsOutVideoToHostPrm.baseCreateParams.inQueParams.prevLinkId = gVencModuleContext.encId;
    ipcBitsOutVideoToHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
    ipcBitsOutVideoToHostPrm.baseCreateParams.numOutQue = 1;
    ipcBitsOutVideoToHostPrm.baseCreateParams.outQueParams[0].nextLink = gVencModuleContext.ipcBitsInHLOSId;
    MultiCh_ipcBitsInitCreateParams_BitsOutRTOS(&ipcBitsOutVideoToHostPrm, TRUE);

    /* IPC Bits In HOST Link params */
    ipcBitsInHostPrm.baseCreateParams.noNotifyMode = TRUE;
    ipcBitsInHostPrm.baseCreateParams.notifyNextLink = FALSE;
    ipcBitsInHostPrm.baseCreateParams.notifyPrevLink = FALSE;
    ipcBitsInHostPrm.baseCreateParams.inQueParams.prevLinkId = gVencModuleContext.ipcBitsOutRTOSId;
    ipcBitsInHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
    MultiCh_ipcBitsInitCreateParams_BitsInHLOS(&ipcBitsInHostPrm);

    /* Links Creation */
    /* Camera Link */
    System_linkCreate (gVcapModuleContext.captureId, &capPrm, sizeof(capPrm));
    //dup link
    System_linkCreate (dupId, &dupPrm, sizeof(dupPrm));
    //isp
    System_linkCreate (ispId, &ispPrm, sizeof(ispPrm));
    /* Merge Link */
    System_linkCreate(mergeId, &mergePrm, sizeof(mergePrm));

    //out yuv 420 1080P to A8
    System_linkCreate(gVcamModuleContext.ipcFramesOutVpssToHostId, &ipcFramesOutVpssToHostPrm, sizeof(ipcFramesOutVpssToHostPrm));
    System_linkCreate(gVcamModuleContext.ipcFramesInHostId, &ipcFramesInHostPrm, sizeof(ipcFramesInHostPrm));

    System_linkGetInfo(gVcamModuleContext.ipcFramesInHostId,&framesProducerLinkInfo);
    OSA_assert(framesProducerLinkInfo.numQue == 1);
    ipcFramesOutHostPrm.inQueInfo = framesProducerLinkInfo.queInfo[0];
    //A8 out yuv420 to M3Video
    System_linkCreate(gVcamModuleContext.ipcFramesOutHostId, &ipcFramesOutHostPrm, sizeof(ipcFramesOutHostPrm));
    System_linkCreate(ipcInVideoFrameId, &ipcFramesInVideoFromHostPrm, sizeof(ipcFramesInVideoFromHostPrm));
    // Video Encoder Link
    System_linkCreate(gVencModuleContext.encId, &encPrm, sizeof(encPrm));

    //M3Video to A8
    System_linkCreate(gVencModuleContext.ipcBitsOutRTOSId, &ipcBitsOutVideoToHostPrm, sizeof(ipcBitsOutVideoToHostPrm));
    System_linkCreate(gVencModuleContext.ipcBitsInHLOSId, &ipcBitsInHostPrm, sizeof(ipcBitsInHostPrm));
    return 0;
    }


    Int32 multich_start_uw_fullftr()
    {
    UInt32 mergeId;
    UInt32 ipcInVideoFrameId;
    UInt32 ispId;
    UInt32 dupId;

    mergeId = SYSTEM_VPSS_LINK_ID_MERGE_0;
    ipcInVideoFrameId = SYSTEM_VIDEO_LINK_ID_IPC_FRAMES_IN_0;
    dupId = SYSTEM_VPSS_LINK_ID_DUP_0;
    ispId = SYSTEM_LINK_ID_ISP_0;
    //start Links
    System_linkStart(gVencModuleContext.ipcBitsInHLOSId);
    System_linkStart(gVencModuleContext.ipcBitsOutRTOSId);
    System_linkStart(gVencModuleContext.encId);
    System_linkStart(ipcInVideoFrameId);

    System_linkStart(gVcamModuleContext.ipcFramesOutHostId);
    System_linkStart(gVcamModuleContext.ipcFramesInHostId);
    System_linkStart(gVcamModuleContext.ipcFramesOutVpssToHostId);

    System_linkStart(mergeId);

    System_linkStart(ispId);

    System_linkStart(dupId);

    System_linkStart(gVcapModuleContext.captureId);

    return 0;

    }
  • I use capturelink get yuv422 from vin0 portA.
    it's resolution is 2592*2128, I want IspLink to make it's resolution to 1920*1080.

    it cannot work when I use isplink , why?


    usecase
    ispPrm.vnfFullResolution = FALSE;
    ispPrm.clkDivM = 10;
    ispPrm.clkDivN = 20;//20
    ispPrm.vsEnable = FALSE;

    ispPrm.inQueParams.prevLinkId = dupId;
    ispPrm.inQueParams.prevLinkQueId = 1;

    ispPrm.numOutQueue = 1;
    ispPrm.outQueInfo[0].nextLink = mergeId;
    ispPrm.outQueuePrm[0].dataFormat = SYSTEM_DF_YUV420SP_UV;
    ispPrm.outQueuePrm[0].width = 1920;
    ispPrm.outQueuePrm[0].height = 1080;
  • but Isp hunged up after the message printed " ISP : Received and returning 1 frames ".
  • Hi,

     

    The ISP link doesn't work independently and is not tested for YUV resizing in IPNC RDK ver 3.5.

    It works only when camera link is created.

    We have got it working on top of IPNC RDK ver 3.8.

    I need to merge back the patch on ver 3.5 and test.

    Pl. give me couple of days time to provide you the patch.

     

    regards,

    Anand

     

     

  • thank a lot for your done.
  • thanks a lot for your done /

    waiting for your answer.
  • Hi,

     

    Pl. find the patch to support YUV resizing in the ISP link attached.

     

    regards,

    Anand5126.Jan0915_YUV_RSZ.zip

  • hi , Anand Kulkarni71405

    thanks a lot for your help!!!

    I try it .

  • hi , Anand Kulkarni71405
    thanks a lot for your help.

    now, it can work .

    thanks again.
  • hi , Anand Kulkarni71405.

    now, it can work, but why the frame rate is down from 25fps to 12fps?
  • Hi,

     

    Can you pl. figure out where the frame drops are happening in the system?

    Pl. profile the ISP link performance.

     

    regards,

    Anand

  • my print:

    [m3vpss ]  44738: ISP   : Received and returning 6 frames !!!
     [m3vpss ]  44820: ISP   : Process time = 81 msec !!!
     [m3vpss ]  44901: ISP   : Process time = 81 msec !!!
     [m3vpss ]  44983: ISP   : Process time = 81 msec !!!
     [m3vpss ]  45064: ISP   : Process time = 81 msec !!!
     [m3vpss ]  45146: ISP   : Process time = 81 msec !!!
     [m3vpss ]  45227: ISP   : Process time = 81 msec !!!
     [m3vpss ]  45227: ISP   : Received and returning 6 frames !!!
     [m3vpss ]  45309: ISP   : Process time = 82 msec !!!
     [m3vpss ]  45390: ISP   : Process time = 81 msec !!!
     [m3vpss ]  45472: ISP   : Process time = 82 msec !!!
     [m3vpss ]  45553: ISP   : Process time = 81 msec !!!
     [m3vpss ]  45635: ISP   : Process time = 81 msec !!!
     [m3vpss ]  45717: ISP   : Process time = 81 msec !!!

    isp process one frame's time is too long!

    how to make it more quickly?

    thanks

  • Hi,

     

    The resizer is running at 100 MHz because the clkDivM = 10 and clkDivN = 20 so (200 * 10)/20 = 100 MHz.

    The time taken to resize 2592x2128 = (2592 x 2128)/100 = 55157 usec = 55 msec.

    Since the input is YUV420 where in Y and UV plane resizing are done one by one, the total resize time = 55 * 1.5 = 82.7 msec.

    So you can get 1000/82.7 = 12 fps performance from the resizer.

    You can try to increase the resizer clock but you have to make sure it is stable.

     

    regards,

    Anand

  • Hi,

     

    If you are going to use the downscaled image (1080p) for further processing then explore the downsize options in the sensor itself.

     

    regards,

    Anand

  • hi Anand Kulkarni71405:

    1. how to increase the resizer clock? I modify clkDivM = 20 and clkDivN = 20 is resizer clock?

    2. the sensor I need one 2592*2128 stream to do other thing, one 1080P stream for view or recording.

    3. I have two sensor one is 200w resolution, one is 500w resolution, when i use 200w resolution the uv is right, but when 500w the uv error,

     two resolution sensor  I got the stream all from vin0 portA , but why 500w uv err? I don't konw why ?
     

  • Hi,

    You can increase the Resizer clock by changing the values of 'ispPrm.clkDivM' and 'ispPrm.clkDivN'.

    Default settings are 10 and 20 that means the Resizer is running at half the ISS clock.

    You can change the M and N values to (60,100),(70,100),(80,100) and make sure the Resizer doesn't hang.

    Anoth

    #include <sys_pri.h>
    
    //#define L3_STATIC_PRESSURE_SET_ENABLE
    
    SYS_PRI_Ctrl gSYS_PRI_ctrl;
    
    int SYS_PRI_isValidBwReg(int bwRegId)
    {
      #if defined(TI_814X_BUILD) || defined(TI_8107_BUILD)
      if(bwRegId==BW_REG_HDVICP1)
        return 0;
      if(bwRegId==BW_REG_HDVICP2)
        return 0;
    
        #if defined(TI_8107_BUILD)
        if(bwRegId==BW_REG_DSP)
            return 0;
        if(bwRegId==BW_REG_SGX)
            return 0;
        if(bwRegId==BW_REG_EDMA_RD0)
            return 0;
        if(bwRegId==BW_REG_EDMA_WR0)
            return 0;
        if(bwRegId==BW_REG_EDMA_RD1)
            return 0;
        if(bwRegId==BW_REG_EDMA_WR1)
            return 0;
        #endif
      #endif
    
      return 1;
    }
    
    int SYS_PRI_printCmdLineArgs(char *str)
    {
      OSA_printf("\n");
      OSA_printf(" TI816x System Prioirty read/write utility, (c) Texas Instruments 2010\n");
      OSA_printf(" Built on %s %s\n", __DATE__, __TIME__);
      OSA_printf(" \n");
      OSA_printf(" %s --printAll # Prints all system priority setting info\n", str);
      OSA_printf(" %s --regDump  # Prints all register values related to system priority setting\n", str);
      OSA_printf(" \n");
      OSA_printf(" %s --dmm-pri-set <dmm-initiator-name> <dmm-priority> \n"
             " # Set a DMM priority for a specified DMM initiator \n", str);
      OSA_printf(" \n");
      #ifdef L3_STATIC_PRESSURE_SET_ENABLE
      OSA_printf(" %s --L3-pri-set <L3-initiator-name> <L3-static-pressure> \n"
             " # Set a L3 static pressure for a specified L3 initiator \n", str);
      OSA_printf(" \n");
      #endif
      OSA_printf(" %s --L3-bw-reg-set <L3-bw-reg-initiator-name> <L3-pressure-High> <L3-pressure-Low> <L3-Bandwidth> <L3-Watermark-cycles> \n"
             " # Setup L3 Bandwidth regulator for a specified L3 initiator \n",
                    str);
      OSA_printf(" \n");
      OSA_printf(" Valid values for \"dmm-initiator-name\" are,\n");
      OSA_printf(" A8       SYS_MMU  DUCATI   EDMA_RD0 EDMA_RD1 EDMA_RD2 EDMA_RD3\n");
      OSA_printf(" EDMA_WR0 EDMA_WR1 EDMA_WR2 EDMA_WR3 SGX      HDVICP0  HDVICP1 \n");
      OSA_printf(" HDVICP2  GMAC0    GMAC1    USB_DMA  USB_QMGR SATA     PCIE    \n");
      OSA_printf(" \n");
      #ifdef L3_STATIC_PRESSURE_SET_ENABLE
      OSA_printf(" Valid values for \"L3-initiator-name\" are,\n");
      OSA_printf(" A8       DSP_CFG  HDVPSS0  HDVPSS1  EDMA_RD2 EDMA_WR2 EDMA_RD3\n");
      OSA_printf(" EDMA_WR3 GMAC0    GMAC1    USB_DMA  USB_QMGR SATA     DUCATI  \n");
      OSA_printf(" PCIE \n");
      OSA_printf(" \n");
      #endif
      OSA_printf(" Valid values for \"L3-bw-reg-initiator-name\" are,\n");
      OSA_printf(" HDVICP0  HDVICP1  HDVICP2  EDMA_RD0 EDMA_WR0 EDMA_RD1 EDMA_WR1\n");
      OSA_printf(" DSP      SGX   ISS\n");
      OSA_printf(" \n");
      OSA_printf(" Valid values for \"dmm-priority\"       are, 0..7 (0 is highest priority)\n");
      #ifdef L3_STATIC_PRESSURE_SET_ENABLE
      OSA_printf(" Valid values for \"L3-static-pressure\" are, 0, 1, 3 (0 is lowest priority)\n");
      #endif
      OSA_printf(" Valid values for \"L3-pressure-High\"   are, 0, 1, 3 (0 is lowest priority)\n");
      OSA_printf(" Valid values for \"L3-pressure-Low\"    are, 0, 1, 3 (0 is lowest priority)\n");
      OSA_printf(" Valid values for \"L3-Bandwidth\" (in MB/s) are, 0..%u\n", 0x1FFF);
      OSA_printf(" Valid values for \"L3-Watermark\" (in cycles) are, 0..%d\n", 0xFFF);
      OSA_printf(" \n");
      OSA_printf(" IMPORTANT NOTE: \n"
             " - L3 Static pressure cannot be set via this utility.\n"
             " - Processor needs to be in supervisor mode to set L3 static priority.\n"
             " - L3 Static pressure can only be read via this utility.\n"
             );
      OSA_printf(" \n");
    
      return 0;
    }
    
    int SYS_PRI_mapMem()
    {
      int memDevFd, i;
    
      memDevFd = open("/dev/mem",O_RDWR|O_SYNC);
    
      if(memDevFd < 0)
      {
        OSA_printf(" ERROR: /dev/mem open failed !!!\n");
        return -1;
      }
    
    	gSYS_PRI_ctrl.initPressureMmapAddr = mmap(
    	        (void	*)REG_INIT_PRESSURE_BASE_PHYS,
    	        REG_INIT_PRESSURE_SIZE,
    					PROT_READ|PROT_WRITE|PROT_EXEC,MAP_SHARED,
    					memDevFd,
    					REG_INIT_PRESSURE_BASE_PHYS
    					);
    
    	if (gSYS_PRI_ctrl.initPressureMmapAddr==NULL)
    	{
    		OSA_printf(" ERROR: mmap() failed !!!\n");
            close(memDevFd);
    		return -1;
    	}
    
    	gSYS_PRI_ctrl.bwRegMmapAddr = mmap(
    	        (void	*)REG_BW_REG_BASE_PHYS,
    	        REG_BW_REG_SIZE,
    					PROT_READ|PROT_WRITE|PROT_EXEC,MAP_SHARED,
    					memDevFd,
    					REG_BW_REG_BASE_PHYS
    					);
    
    	if (gSYS_PRI_ctrl.bwRegMmapAddr==NULL)
    	{
    		OSA_printf(" ERROR: mmap() failed !!!\n");
            close(memDevFd);
    		return -1;
    	}
    
    	gSYS_PRI_ctrl.dmmPegPriMmapAddr = mmap(
    	        (void	*)REG_DMM_PEG_PRI_BASE_PHYS,
    	        REG_DMM_PEG_SIZE,
    					PROT_READ|PROT_WRITE|PROT_EXEC,MAP_SHARED,
    					memDevFd,
    					REG_DMM_PEG_PRI_BASE_PHYS
    					);
    
    	if (gSYS_PRI_ctrl.dmmPegPriMmapAddr==NULL)
    	{
    		OSA_printf(" ERROR: mmap() failed !!!\n");
            close(memDevFd);
    		return -1;
    	}
    
      close(memDevFd);
    
      gSYS_PRI_ctrl.initPressure[0] = gSYS_PRI_ctrl.initPressureMmapAddr + (REG_INIT_PRESSURE_0_PHYS_OFF/sizeof(REG32));
      gSYS_PRI_ctrl.initPressure[1] = (gSYS_PRI_ctrl.initPressure[0]+1);
    
      if(gSYS_PRI_ctrl.doRegDump)
      {
        OSA_printf(" \n");
        OSA_printf(" INIT_PRESSURE[0] @ 0x%08x = 0x%08x\n", (REG32)gSYS_PRI_ctrl.initPressure[0], *(REG32*)gSYS_PRI_ctrl.initPressure[0]);
        OSA_printf(" INIT_PRESSURE[1] @ 0x%08x = 0x%08x \n", (REG32)gSYS_PRI_ctrl.initPressure[1], *(REG32*)gSYS_PRI_ctrl.initPressure[1]);
      }
    
      if(gSYS_PRI_ctrl.doRegDump)
        OSA_printf(" \n");
    
      for(i=0; i<BW_REG_MAX; i++)
      {
        gSYS_PRI_ctrl.bwReg[i] = (SYS_PRI_BwReg*)((REG32)gSYS_PRI_ctrl.bwRegMmapAddr + REG_BW_REG_HDVICP0_PHYS_OFF + REG_BW_REG_HDVICP0_SIZE*i);
    
        if(gSYS_PRI_ctrl.doRegDump)
        {
          OSA_printf(" BW_REGULATOR[%d]  @ 0x%08x = 0x%08x 0x%08x 0x%08x 0x%08x\n", i, (REG32)gSYS_PRI_ctrl.bwReg[i],
                      gSYS_PRI_ctrl.bwReg[i]->bandwidth,
                      gSYS_PRI_ctrl.bwReg[i]->watermark,
                      gSYS_PRI_ctrl.bwReg[i]->pressure,
                      gSYS_PRI_ctrl.bwReg[i]->clearHistory
                      );
        }
      }
    
      if(gSYS_PRI_ctrl.doRegDump)
        OSA_printf(" \n");
    
      for(i=0; i<8; i++)
      {
        gSYS_PRI_ctrl.dmmPegPri[i] = (REG32*)((REG32)gSYS_PRI_ctrl.dmmPegPriMmapAddr + REG_DMM_PEG_PRI0_PHYS_OFF + sizeof(REG32)*i);
    
        if(gSYS_PRI_ctrl.doRegDump)
          OSA_printf(" DMM_PEG_PRI[%d]   @ 0x%08x = 0x%08x \n", i, (REG32)gSYS_PRI_ctrl.dmmPegPri[i], *(REG32*)gSYS_PRI_ctrl.dmmPegPri[i]);
      }
    
      if(gSYS_PRI_ctrl.doRegDump)
        OSA_printf(" \n");
    
      return 0;
    }
    
    int SYS_PRI_unmapMem()
    {
      if(gSYS_PRI_ctrl.initPressureMmapAddr)
        munmap((void*)gSYS_PRI_ctrl.initPressureMmapAddr, REG_BW_REG_SIZE);
    
      if(gSYS_PRI_ctrl.bwRegMmapAddr)
        munmap((void*)gSYS_PRI_ctrl.bwRegMmapAddr, REG_BW_REG_SIZE);
    
      if(gSYS_PRI_ctrl.dmmPegPriMmapAddr)
        munmap((void*)gSYS_PRI_ctrl.dmmPegPriMmapAddr, REG_DMM_PEG_SIZE);
    
      return 0;
    }
    
    int SYS_PRI_dmmPriSet(char *name, int pri)
    {
      REG32 value, shift;
      REG32 *pAddr;
      int status, setReg;
    
      status = SYS_PRI_mapMem();
      if(status!=0)
        SYS_PRI_unmapMem();
    
      setReg = 1;
      value = 0x8 | (pri & 0x7);
      pAddr = gSYS_PRI_ctrl.dmmPegPri[0];
      shift = 0;
    
      if(strcmp(name,"A8")==0)
      {
        pAddr = gSYS_PRI_ctrl.dmmPegPri[0];
        shift = 0;
      } else
      if(strcmp(name,"SYS_MMU")==0)
      {
        pAddr = gSYS_PRI_ctrl.dmmPegPri[1];
        shift = 8;
      } else
      if(strcmp(name,"DUCATI")==0)
      {
        pAddr = gSYS_PRI_ctrl.dmmPegPri[1];
        shift = 24;
      } else
      if(strcmp(name,"EDMA_RD0")==0)
      {
        pAddr = gSYS_PRI_ctrl.dmmPegPri[3];
        shift = 0;
      } else
      if(strcmp(name,"EDMA_RD1")==0)
      {
        pAddr = gSYS_PRI_ctrl.dmmPegPri[3];
        shift = 4;
      } else
      if(strcmp(name,"EDMA_RD2")==0)
      {
        pAddr = gSYS_PRI_ctrl.dmmPegPri[3];
        shift = 8;
      } else
      if(strcmp(name,"EDMA_RD3")==0)
      {
        pAddr = gSYS_PRI_ctrl.dmmPegPri[3];
        shift = 12;
      } else
      if(strcmp(name,"EDMA_WR0")==0)
      {
        pAddr = gSYS_PRI_ctrl.dmmPegPri[3];
        shift = 16;
      } else
      if(strcmp(name,"EDMA_WR1")==0)
      {
        pAddr = gSYS_PRI_ctrl.dmmPegPri[3];
        shift = 20;
      } else
      if(strcmp(name,"EDMA_WR2")==0)
      {
        pAddr = gSYS_PRI_ctrl.dmmPegPri[3];
        shift = 24;
      } else
      if(strcmp(name,"EDMA_WR3")==0)
      {
        pAddr = gSYS_PRI_ctrl.dmmPegPri[3];
        shift = 28;
      } else
      if(strcmp(name,"SGX")==0)
      {
        pAddr = gSYS_PRI_ctrl.dmmPegPri[4];
        shift = 0;
      } else
      if(strcmp(name,"HDVICP0")==0)
      {
        pAddr = gSYS_PRI_ctrl.dmmPegPri[5];
        shift = 0;
      } else
      if(strcmp(name,"ISS")==0)
      {
        pAddr = gSYS_PRI_ctrl.dmmPegPri[5];
        shift = 16;
      } else
      if(strcmp(name,"HDVICP1")==0)
      {
        pAddr = gSYS_PRI_ctrl.dmmPegPri[5];
        shift = 16;
      } else
      if(strcmp(name,"HDVICP2")==0)
      {
        pAddr = gSYS_PRI_ctrl.dmmPegPri[5];
        shift = 20;
      } else
      if(strcmp(name,"GMAC0")==0)
      {
        pAddr = gSYS_PRI_ctrl.dmmPegPri[6];
        shift = 0;
      } else
      if(strcmp(name,"GMAC1")==0)
      {
        pAddr = gSYS_PRI_ctrl.dmmPegPri[6];
        shift = 4;
      } else
      if(strcmp(name,"USB_DMA")==0)
      {
        pAddr = gSYS_PRI_ctrl.dmmPegPri[6];
        shift = 16;
      } else
      if(strcmp(name,"USB_QMGR")==0)
      {
        pAddr = gSYS_PRI_ctrl.dmmPegPri[6];
        shift = 20;
      } else
      if(strcmp(name,"SATA")==0)
      {
        pAddr = gSYS_PRI_ctrl.dmmPegPri[7];
        shift = 0;
      } else
      if(strcmp(name,"PCIE")==0)
      {
        pAddr = gSYS_PRI_ctrl.dmmPegPri[7];
        shift = 4;
      } else
      {
        OSA_printf(" ERROR: Unknown DMM initiator [%s] \n", name);
        setReg = 0;
      }
    
      if(setReg)
      {
        value <<= shift;
    
        OSA_printf(" Setting DMM priority for [%-8s] to [%d] ( 0x%08x = 0x%08x )\n", name, pri, (unsigned int)pAddr, value);
    
        *pAddr = value;
    
    
      }
    
      SYS_PRI_unmapMem();
    
      return 0;
    }
    
    int SYS_PRI_l3StaticPressureSet(char *name, int staticPressure)
    {
      REG32 shift, mask;
      REG32 *pAddr;
      int status, regNum;
      int setReg;
    
      status = SYS_PRI_mapMem();
      if(status!=0)
        SYS_PRI_unmapMem();
    
      setReg = 1;
      regNum = 0;
      mask  = 0x3;
      shift = 0;
    
      if(strcmp(name,"A8")==0)
      {
        regNum = 0;
        shift = 0;
      } else
      if(strcmp(name,"DSP_CFG")==0)
      {
        regNum = 0;
        shift = 4;
      } else
      if(strcmp(name,"HDVPSS0")==0)
      {
        regNum = 0;
        shift = 8;
        mask = 0x1;
      } else
      if(strcmp(name,"HDVPSS1")==0)
      {
        regNum = 0;
        shift = 10;
        mask = 0x1;
      } else
      if(strcmp(name,"EDMA_RD2")==0)
      {
        regNum = 0;
        shift = 24;
      } else
      if(strcmp(name,"EDMA_WR2")==0)
      {
        regNum = 0;
        shift = 26;
      } else
      if(strcmp(name,"EDMA_RD3")==0)
      {
        regNum = 0;
        shift = 28;
      } else
      if(strcmp(name,"EDMA_WR3")==0)
      {
        regNum = 0;
        shift = 30;
      } else
      if(strcmp(name,"GMAC0")==0)
      {
        regNum = 1;
        shift = 0;
      } else
      if(strcmp(name,"GMAC1")==0)
      {
        regNum = 1;
        shift = 2;
      } else
      if(strcmp(name,"USB_DMA")==0)
      {
        regNum = 1;
        shift = 4;
      } else
      if(strcmp(name,"USB_QMGR")==0)
      {
        regNum = 1;
        shift = 6;
      } else
      if(strcmp(name,"SATA")==0)
      {
        regNum = 1;
        shift = 8;
      } else
      if(strcmp(name,"DUCATI")==0)
      {
        regNum = 1;
        shift = 14;
      } else
      if(strcmp(name,"PCIE")==0)
      {
        regNum = 1;
        shift = 16;
      } else
      {
        OSA_printf(" ERROR: Unknown L3 static pressure initiator [%s] \n", name);
        setReg = FALSE;
      }
    
      if(setReg)
      {
        OSA_printf(" Setting L3 static pressure for [%-8s] to [%d]\n", name, staticPressure);
    
        pAddr = gSYS_PRI_ctrl.initPressure[regNum];
    
        /* clear value */
        *pAddr &= (mask << shift);
    
        /* set value */
        *pAddr |= ( (staticPressure & mask) << shift);
      }
    
      SYS_PRI_unmapMem();
    
      return 0;
    }
    
    int SYS_PRI_l3BwRegSet(char *name, int pressH, int pressL, int bandwidth, int watermark)
    {
      volatile SYS_PRI_BwReg *pReg;
      int status, bwRegId, setReg;
    
      status = SYS_PRI_mapMem();
      if(status!=0)
        SYS_PRI_unmapMem();
    
      setReg = 1;
      bwRegId = 0;
    
      if(strcmp(name,"HDVICP0")==0)
      {
        bwRegId = 0;
      } else
      if(strcmp(name,"HDVICP1")==0)
      {
        bwRegId = 1;
      } else
      if(strcmp(name,"HDVICP2")==0)
      {
        bwRegId = 2;
      } else
      if(strcmp(name,"EDMA_RD0")==0)
      {
        bwRegId = 3;
      } else
      if(strcmp(name,"EDMA_WR0")==0)
      {
        bwRegId = 4;
      } else
      if(strcmp(name,"EDMA_RD1")==0)
      {
        bwRegId = 5;
      } else
      if(strcmp(name,"EDMA_WR1")==0)
      {
        bwRegId = 6;
      } else
      if(strcmp(name,"DSP")==0)
      {
        bwRegId = 7;
      } else
      if(strcmp(name,"SGX")==0)
      {
        bwRegId = 8;
      } else
      if(strcmp(name,"ISS")==0)
      {
        bwRegId = 9;
      } else
      {
        OSA_printf(" ERROR: Unknown L3 static pressure initiator [%s] \n", name);
        setReg = FALSE;
      }
    
      if(!SYS_PRI_isValidBwReg(bwRegId))
      {
        printf(" ERROR: L3 initiator [%s] NOT supported on this platform\n", name);
        setReg = FALSE;
      }
    
      if(setReg)
      {
        OSA_printf(" Setting L3 bandwidth regulator for [%-8s] to [press=[%d,%d] BW=%d, WM Cycles=%d]\n",
          name, pressH, pressL, bandwidth, watermark
        );
    
        bandwidth = (REG32)((float)bandwidth/15.625+0.999);
    
        pReg = gSYS_PRI_ctrl.bwReg[bwRegId];
    
        pReg->bandwidth = bandwidth & 0x1FFFF;
        pReg->watermark = watermark & 0xFFF;
        pReg->pressure  = (pressH & 3) | ((pressL & 3) << 2);
        pReg->clearHistory = 0x1; // apply settings
      }
    
      SYS_PRI_unmapMem();
    
      return 0;
    }
    
    int SYS_PRI_printBwReg(int bwRegId)
    {
      int bandwidth, watermark, pressH, pressL;
    
      float cycles, bandwidthMBs;
    
      static char *name[] = {
        "HDVICP0 ", "HDVICP1 ", "HDVICP2 ", "EDMA_RD0",
        "EDMA_WR0", "EDMA_RD1", "EDMA_WR1", "DSP     ",
        "SGX     ", "ISS     ",
      };
    
      if(!SYS_PRI_isValidBwReg(bwRegId))
        return 0;
    
      bandwidth = gSYS_PRI_ctrl.bwReg[bwRegId]->bandwidth;
      watermark = gSYS_PRI_ctrl.bwReg[bwRegId]->watermark & 0xFFF;
      pressH    = (gSYS_PRI_ctrl.bwReg[bwRegId]->pressure >> 0) & 3;
      pressL    = (gSYS_PRI_ctrl.bwReg[bwRegId]->pressure >> 2) & 3;
    
      bandwidthMBs = bandwidth*15.625;
    
      if(bandwidth==0)
        bandwidth=1;
    
      cycles = (watermark*1000)/(2*bandwidth*15.625);
    
      OSA_printf(" %s : %-8d %-8d %-17.3f %d (%d)\n",
        name[bwRegId], pressH, pressL, bandwidthMBs, watermark, (int)cycles
        );
    
      return 0;
    }
    
    int SYS_PRI_doPrintAll()
    {
      REG32 value=0;
      int i, status;
    
      status = SYS_PRI_mapMem();
      if(status != 0)
        SYS_PRI_unmapMem();
    
      value = *(REG32*)gSYS_PRI_ctrl.initPressure[0];
    
      gSYS_PRI_ctrl.initPressureA8      = (value >> 0 ) & 3;
      gSYS_PRI_ctrl.initPressureDSP_CFG = (value >> 4 ) & 3;
      gSYS_PRI_ctrl.initPressureHDVPSS0 = (value >> 8 ) & 1;
      gSYS_PRI_ctrl.initPressureHDVPSS1 = (value >> 10) & 1;
      gSYS_PRI_ctrl.initPressureEDMARD2 = (value >> 24) & 3;
      gSYS_PRI_ctrl.initPressureEDMAWR2 = (value >> 26) & 3;
      gSYS_PRI_ctrl.initPressureEDMARD3 = (value >> 28) & 3;
      gSYS_PRI_ctrl.initPressureEDMAWR3 = (value >> 30) & 3;
    
      value = *(REG32*)gSYS_PRI_ctrl.initPressure[1];
    
      gSYS_PRI_ctrl.initPressureGMAC0   = (value >> 0 ) & 3;
      gSYS_PRI_ctrl.initPressureGMAC1   = (value >> 2 ) & 3;
      gSYS_PRI_ctrl.initPressureUSB_DMA = (value >> 4 ) & 3;
      gSYS_PRI_ctrl.initPressureUSB_QMGR= (value >> 6 ) & 3;
      gSYS_PRI_ctrl.initPressureSATA    = (value >> 8 ) & 3;
      gSYS_PRI_ctrl.initPressureDUCATI  = (value >> 14) & 3;
      gSYS_PRI_ctrl.initPressurePCIE    = (value >> 16) & 3;
    
      OSA_printf(" \n");
      OSA_printf(" L3 Static Pressure \n");
      OSA_printf(" ================== \n");
      OSA_printf(" A8       DSP_CFG  HDVPSS0  HDVPSS1  EDMA_RD2 EDMA_WR2 EDMA_RD3 EDMA_WR3 \n");
      OSA_printf(" %-8d %-8d %-8d %-8d %-8d %-8d %-8d %-8d\n",
        gSYS_PRI_ctrl.initPressureA8,
        gSYS_PRI_ctrl.initPressureDSP_CFG,
        gSYS_PRI_ctrl.initPressureHDVPSS0,
        gSYS_PRI_ctrl.initPressureHDVPSS1,
        gSYS_PRI_ctrl.initPressureEDMARD2,
        gSYS_PRI_ctrl.initPressureEDMAWR2,
        gSYS_PRI_ctrl.initPressureEDMARD3,
        gSYS_PRI_ctrl.initPressureEDMAWR3
          );
      OSA_printf(" \n");
      OSA_printf(" GMAC0    GMAC1    USB_DMA  USB_QMGR SATA     DUCATI   PCIE\n");
      OSA_printf(" %-8d %-8d %-8d %-8d %-8d %-8d %-8d\n",
        gSYS_PRI_ctrl.initPressureGMAC0 ,
        gSYS_PRI_ctrl.initPressureGMAC1 ,
        gSYS_PRI_ctrl.initPressureUSB_DMA,
        gSYS_PRI_ctrl.initPressureUSB_QMGR,
        gSYS_PRI_ctrl.initPressureSATA,
        gSYS_PRI_ctrl.initPressureDUCATI,
        gSYS_PRI_ctrl.initPressurePCIE
          );
    
      OSA_printf(" \n");
    
      value = *(REG32*)gSYS_PRI_ctrl.dmmPegPri[0];
    
      gSYS_PRI_ctrl.dmmPegPriA8      = (value >> 0 ) & 7;
    
      value = *(REG32*)gSYS_PRI_ctrl.dmmPegPri[1];
    
      gSYS_PRI_ctrl.dmmPegPriSYS_MMU = (value >> 8 ) & 7;
      gSYS_PRI_ctrl.dmmPegPriDUCATI  = (value >> 24) & 7;
    
      value = *(REG32*)gSYS_PRI_ctrl.dmmPegPri[3];
    
      gSYS_PRI_ctrl.dmmPegPriEDMARD0 = (value >> 0 ) & 7;
      gSYS_PRI_ctrl.dmmPegPriEDMARD1 = (value >> 4 ) & 7;
      gSYS_PRI_ctrl.dmmPegPriEDMARD2 = (value >> 8 ) & 7;
      gSYS_PRI_ctrl.dmmPegPriEDMARD3 = (value >> 12) & 7;
      gSYS_PRI_ctrl.dmmPegPriEDMAWR0 = (value >> 16) & 7;
      gSYS_PRI_ctrl.dmmPegPriEDMAWR1 = (value >> 20) & 7;
      gSYS_PRI_ctrl.dmmPegPriEDMAWR2 = (value >> 24) & 7;
      gSYS_PRI_ctrl.dmmPegPriEDMAWR3 = (value >> 28) & 7;
    
      value = *(REG32*)gSYS_PRI_ctrl.dmmPegPri[4];
    
      gSYS_PRI_ctrl.dmmPegPriSGX     = (value >> 0 ) & 7;
    
      value = *(REG32*)gSYS_PRI_ctrl.dmmPegPri[5];
    
      gSYS_PRI_ctrl.dmmPegPriHDVICP0 = (value >> 0 ) & 7;
      gSYS_PRI_ctrl.dmmPegPriHDVICP1 = (value >> 16) & 7;
      gSYS_PRI_ctrl.dmmPegPriHDVICP2 = (value >> 20) & 7;
    
      value = *(REG32*)gSYS_PRI_ctrl.dmmPegPri[6];
    
      gSYS_PRI_ctrl.dmmPegPriGMAC0   = (value >> 0 ) & 7;
      gSYS_PRI_ctrl.dmmPegPriGMAC1   = (value >> 4 ) & 7;
      gSYS_PRI_ctrl.dmmPegPriUSB_DMA = (value >> 16) & 7;
      gSYS_PRI_ctrl.dmmPegPriUSB_QMGR= (value >> 20) & 7;
    
      value = *(REG32*)gSYS_PRI_ctrl.dmmPegPri[7];
    
      gSYS_PRI_ctrl.dmmPegPriSATA    = (value >> 0) & 7;
      gSYS_PRI_ctrl.dmmPegPriPCIE    = (value >> 4) & 7;
    
      OSA_printf(" \n");
      OSA_printf(" DMM Priority \n");
      OSA_printf(" ============ \n");
      OSA_printf(" A8       SYS_MMU  DUCATI   EDMA_RD0 EDMA_RD1 EDMA_RD2 EDMA_RD3 EDMA_WR0 \n");
      OSA_printf(" %-8d %-8d %-8d %-8d %-8d %-8d %-8d %-8d\n",
        gSYS_PRI_ctrl.dmmPegPriA8      ,
        gSYS_PRI_ctrl.dmmPegPriSYS_MMU ,
        gSYS_PRI_ctrl.dmmPegPriDUCATI  ,
        gSYS_PRI_ctrl.dmmPegPriEDMARD0 ,
        gSYS_PRI_ctrl.dmmPegPriEDMARD1 ,
        gSYS_PRI_ctrl.dmmPegPriEDMARD2 ,
        gSYS_PRI_ctrl.dmmPegPriEDMARD3 ,
        gSYS_PRI_ctrl.dmmPegPriEDMAWR0
          );
    
      OSA_printf(" \n");
      OSA_printf(" EDMA_WR1 EDMA_WR2 EDMA_WR3 SGX      HDVICP0  HDVICP1  HDVICP2  GMAC0    \n");
      OSA_printf(" %-8d %-8d %-8d %-8d %-8d %-8d %-8d %-8d\n",
        gSYS_PRI_ctrl.dmmPegPriEDMAWR1 ,
        gSYS_PRI_ctrl.dmmPegPriEDMAWR2 ,
        gSYS_PRI_ctrl.dmmPegPriEDMAWR3 ,
        gSYS_PRI_ctrl.dmmPegPriSGX     ,
        gSYS_PRI_ctrl.dmmPegPriHDVICP0 ,
        gSYS_PRI_ctrl.dmmPegPriHDVICP1 ,
        gSYS_PRI_ctrl.dmmPegPriHDVICP2 ,
        gSYS_PRI_ctrl.dmmPegPriGMAC0
          );
    
      OSA_printf(" \n");
      OSA_printf(" GMAC1    USB_DMA  USB_QMGR SATA     PCIE\n");
      OSA_printf(" %-8d %-8d %-8d %-8d %-8d\n",
        gSYS_PRI_ctrl.dmmPegPriGMAC1   ,
        gSYS_PRI_ctrl.dmmPegPriUSB_DMA ,
        gSYS_PRI_ctrl.dmmPegPriUSB_QMGR,
        gSYS_PRI_ctrl.dmmPegPriSATA    ,
        gSYS_PRI_ctrl.dmmPegPriPCIE
          );
      OSA_printf(" \n");
    
      OSA_printf(" \n");
      OSA_printf(" L3 Bandwith Regulator \n");
      OSA_printf(" ===================== \n");
      OSA_printf(" Module   : PressH   PressL   Bandwidth in MB/s Watermark (Cycles) \n");
      for(i=0; i<BW_REG_MAX; i++)
      {
        SYS_PRI_printBwReg(i);
      }
      OSA_printf(" \n");
    
      SYS_PRI_unmapMem();
    
      return 0;
    }
    
    int SYS_PRI_parseCmdLineArgs(int argc, char **argv)
    {
      int i;
      char name[20];
      REG32 value[4];
    
      memset(&gSYS_PRI_ctrl, 0, sizeof(gSYS_PRI_ctrl));
    
      if(argc==1)
      {
          SYS_PRI_printCmdLineArgs(argv[0]);
          exit(0);
      }
    
      // parse and override with command line args
      for(i=1; i<argc; i++)
      {
        if(strcmp(argv[i], "--printAll")==0)
        {
          SYS_PRI_doPrintAll();
        } else
        if(strcmp(argv[i], "--regDump")==0)
        {
          gSYS_PRI_ctrl.doRegDump=TRUE;
          SYS_PRI_mapMem();
          SYS_PRI_unmapMem();
          gSYS_PRI_ctrl.doRegDump=FALSE;
        } else
        if(strcmp(argv[i], "--help")==0)
        {
          SYS_PRI_printCmdLineArgs(argv[0]);
          exit(0);
        } else
        if(strcmp(argv[i], "--dmm-pri-set")==0)
        {
          i++;
          if(i<argc)
          {
            strcpy(name, argv[i]);
            i++;
            if(i<argc)
            {
              value[0] = atoi(argv[i]);
              SYS_PRI_dmmPriSet(name, value[0]);
            }
          }
        } else
        #ifdef L3_STATIC_PRESSURE_SET_ENABLE
        if(strcmp(argv[i], "--L3-pri-set")==0)
        {
          i++;
          if(i<argc)
          {
            strcpy(name, argv[i]);
            i++;
            if(i<argc)
            {
              value[0] = atoi(argv[i]);
              SYS_PRI_l3StaticPressureSet(name, value[0]);
            }
          }
        } else
        #endif
        if(strcmp(argv[i], "--L3-bw-reg-set")==0)
        {
          i++;
          if(i<argc)
          {
            strcpy(name, argv[i]);
            i++;
            if(i<argc)
            {
              value[0] = atoi(argv[i]);
              i++;
              if(i<argc)
              {
                value[1] = atoi(argv[i]);
                i++;
                if(i<argc)
                {
                  value[2] = atoi(argv[i]);
                  i++;
                  if(i<argc)
                  {
                    value[3] = atoi(argv[i]);
                    SYS_PRI_l3BwRegSet(name, value[0], value[1], value[2], value[3]);
                  }
                }
              }
            }
          }
        }
      }
      return 0;
    }
    
    int main(int argc, char **argv)
    {
      SYS_PRI_parseCmdLineArgs(argc, argv);
      return 0;
    }
    
    static char xtod(char c) {
      if (c>='0' && c<='9') return c-'0';
      if (c>='A' && c<='F') return c-'A'+10;
      if (c>='a' && c<='f') return c-'a'+10;
      return c=0;        // not Hex digit
    }
    
    static int HextoDec(char *hex, int l)
    {
      if (*hex==0)
        return(l);
    
      return HextoDec(hex+1, l*16+xtod(*hex)); // hex+1?
    }
    
    int xstrtoi(char *hex)      // hex string to integer
    {
      return HextoDec(hex,0);
    }
    
    sys_pri.her change required is to increase the L3 BW and pressure for ISS:

    • Pl. copy the attached files to '..\ipnc_rdk\ipnc_mcfw\mcfw\src_linux\utils\sys_pri\' folder.
    • Include the cmd './bin/sys_pri.out --L3-bw-reg-set ISS 3 3 400 2500&' in your '..\ipnc_rdk\ipnc_mcfw\bin\ti814x\init.sh' file.

    I don't understand what do you mean by 200w and 500w resolution and what is the error with 500w resolution?

    regards,

    Anand

  • I have two kinds of sensor.
    one max resolution is 1920*1080, I can acquired right image;
    another one's max resulotion is 1952*2128, I acquired the image's Y is correct, but UV not correct ?

    the image like this

    I don't know whether i descriped clearly?

  • Hi,

     

    The other resolution should be 2592x2128 right?

    What is the issue with UV plane? Is it corrupted?

    Can you share the YUV image?

     

    regards,

    Anand

  • The other resolution should be 2592x2128 right?
    yes, one camera is 1920*1080, two streames all 1920*1080;
    one camera is 2592x2128 , one stream is 1952*2128, one stream is 1920*1080

    What is the issue with UV plane? Is it corrupted?
    yes.

    Can you share the YUV image?
    I will upload it later. I can not get it now.
  • Hi,

     

    Can you pl. dump the input YUV frame (2592x2128) to ISP link to ckeck if it is proper?

     

    regards,

    Anand