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.

8168 scalar link处理帧率低?求助!



我对视频做了scalar处理,分为两个link进行处理,每个link两个通道,当然这两个link的裁剪比例是不同的。两个link均能收到21fps,但处理帧率只为8fps。请问为什么处理帧率会这么低?skip out FPS是什么?如图打印信息:

  • 你好;

        可以贴出你的Usecase的代码吗?

        你程序里面是不是有多个模块同时工作在一个sc的物理模块上 ?

  • 下面这个手册可以看一下:

    DVRRDK_04.01.00.02/ti_tools/hdvpss/dvr_rdk_hdvpss/docs/HDVPSS_FeaturePerformanceGuide.pdf

    里面介绍了hdvpss中的sc 、dei 、nsf等模块的理论值和实际性能值;

    物理模块在上层的应用配置,在逻辑上可以同时使用,当个模块的性能有限,就可能出现你上面的情况,(注意swms 、dei 、sc  link )

  • Hi,Ternence Hsu

    下面是usecase代码,link中有两个scalar link,pathId均为SCLR_LINK_SC5。我看文档中提到可将pathId以设置为SCLR_LINK_SEC0_SC3,但是我把另一个scalar link设置为SCLR_LINK_SEC0_SC3,scalar link就会创建失败。

    Void MultiCh_createVcapVencVdis()
    {
        CaptureLink_CreateParams        capturePrm;
    //    DeiLink_CreateParams            deiPrm[NUM_DEI_LINK];	xpli
        DupLink_CreateParams            dupPrm[NUM_DUP_LINK];	//2 dup link
    	SelectLink_CreateParams           selectPrm;		//xpli0710
    	SclrLink_CreateParams             sclrPrm[2];		//xpli0710
        NsfLink_CreateParams            nsfPrm;
        SwMsLink_CreateParams           swMsPrm;
        MergeLink_CreateParams          mergePrm[3];
        DisplayLink_CreateParams        displayPrm[2];
        IpcLink_CreateParams            ipcOutVpssPrm;
        IpcLink_CreateParams            ipcInVideoPrm;
        EncLink_CreateParams            encPrm;
        IpcBitsOutLinkRTOS_CreateParams ipcBitsOutVideoPrm;
        IpcBitsInLinkHLOS_CreateParams  ipcBitsInHostPrm[2];
    
    //xpli 0629
        IpcFramesInLinkRTOS_CreateParams  ipcFramesInDspPrm;
        IpcFramesOutLinkRTOS_CreateParams ipcFramesOutVpssPrm;
        AlgLink_CreateParams              dspAlgPrm;
    
    
    
        CaptureLink_VipInstParams *pCaptureInstPrm;
        CaptureLink_OutParams     *pCaptureOutPrm;
    
        UInt32 vipInstId;
    	UInt32 mergeId[3],selectId;
        UInt32 i,j;
        Bool tilerEnable;
    	Bool enableTiler;
        MULTICH_INIT_STRUCT(IpcLink_CreateParams ,ipcOutVpssPrm);
        MULTICH_INIT_STRUCT(IpcLink_CreateParams ,ipcInVideoPrm);
        MULTICH_INIT_STRUCT(IpcBitsOutLinkRTOS_CreateParams,ipcBitsOutVideoPrm);
        MULTICH_INIT_STRUCT(IpcBitsInLinkHLOS_CreateParams,ipcBitsInHostPrm[0]);
        MULTICH_INIT_STRUCT(IpcBitsInLinkHLOS_CreateParams,ipcBitsInHostPrm[1]);
       
        MULTICH_INIT_STRUCT(EncLink_CreateParams, encPrm);
        MULTICH_INIT_STRUCT(DisplayLink_CreateParams,displayPrm[0]);
    //    MULTICH_INIT_STRUCT(DisplayLink_CreateParams,displayPrm[1]);
    
    //xpli 0629
        MULTICH_INIT_STRUCT(IpcFramesInLinkRTOS_CreateParams,ipcFramesInDspPrm);
        MULTICH_INIT_STRUCT(IpcFramesOutLinkRTOS_CreateParams,ipcFramesOutVpssPrm);
        MULTICH_INIT_STRUCT(AlgLink_CreateParams, dspAlgPrm);
        MULTICH_INIT_STRUCT(SwMsLink_CreateParams,swMsPrm);
    
    	MULTICH_INIT_STRUCT(SclrLink_CreateParams, sclrPrm[0]);	//xpli0710
    	MULTICH_INIT_STRUCT(SclrLink_CreateParams, sclrPrm[1]);	//xpli0710
        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
        );
    
        /* Disable tiler allocator for this usecase
         * for that tiler memory can be reused for
         * non-tiled allocation
         */
        SystemTiler_disableAllocator();
    
        enableTiler                     = FALSE;
    
        gVcapModuleContext.captureId    = SYSTEM_LINK_ID_CAPTURE;
    //    gVcapModuleContext.deiId[0]     = SYSTEM_LINK_ID_DEI_HQ_0;	xpli
        gVcapModuleContext.nsfId[0]     = SYSTEM_LINK_ID_NSF_0;
        gVcapModuleContext.ipcBitsInHLOSId = SYSTEM_HOST_LINK_ID_IPC_BITS_IN_0;
    	selectId   = SYSTEM_VPSS_LINK_ID_SELECT_0;		//xpli0710
    	gVcapModuleContext.sclrId[0]       = SYSTEM_LINK_ID_SCLR_INST_0;
    	gVcapModuleContext.sclrId[1]       = SYSTEM_LINK_ID_SCLR_INST_1;
        gVdisModuleContext.swMsId[0]    = SYSTEM_LINK_ID_SW_MS_MULTI_INST_0;
    
        gVdisModuleContext.displayId[0] = SYSTEM_LINK_ID_DISPLAY_0; // ON CHIP HDMI
        //gVdisModuleContext.displayId[1] = SYSTEM_LINK_ID_DISPLAY_2; // ON CHIP HDMI
        mergeId[0]                         = SYSTEM_VPSS_LINK_ID_MERGE_0;
        mergeId[1]                         = SYSTEM_VPSS_LINK_ID_MERGE_1;
    	mergeId[2]                         = SYSTEM_VPSS_LINK_ID_MERGE_2;
        gVencModuleContext.encId             = SYSTEM_LINK_ID_VENC_0;
        gVencModuleContext.ipcBitsInHLOSId   = SYSTEM_HOST_LINK_ID_IPC_BITS_IN_0;
        gVencModuleContext.ipcBitsOutRTOSId  = SYSTEM_VIDEO_LINK_ID_IPC_BITS_OUT_0;
    
        gMultiCh_VcapVencVdisObj.dupId[0]            = SYSTEM_VPSS_LINK_ID_DUP_0;
    	gMultiCh_VcapVencVdisObj.dupId[1]            = SYSTEM_VPSS_LINK_ID_DUP_1;	//xpli0123
        gMultiCh_VcapVencVdisObj.ipcOutVpssId        = SYSTEM_VPSS_LINK_ID_IPC_OUT_M3_0;
        gMultiCh_VcapVencVdisObj.ipcInVideoId        = SYSTEM_VIDEO_LINK_ID_IPC_IN_M3_0;
    
        gVcapModuleContext.ipcFramesOutVpssToHostId  = SYSTEM_VPSS_LINK_ID_IPC_FRAMES_OUT_1;
        gVcapModuleContext.ipcFramesInHostId         = SYSTEM_HOST_LINK_ID_IPC_FRAMES_IN_0;
        gVdisModuleContext.ipcFramesOutHostId        = SYSTEM_HOST_LINK_ID_IPC_FRAMES_OUT_0;
        gVdisModuleContext.ipcFramesInVpssFromHostId = SYSTEM_VPSS_LINK_ID_IPC_FRAMES_IN_0;
    
    	Bool   enableOsdAlgLink = TRUE;
    //xpli 0629
        if(enableOsdAlgLink)
        {
            gVcapModuleContext.dspAlgId[0] = SYSTEM_LINK_ID_ALG_0;
            gVcapModuleContext.ipcFramesOutVpssId[0] = SYSTEM_VPSS_LINK_ID_IPC_FRAMES_OUT_0;
            gVcapModuleContext.ipcFramesInDspId[0] = SYSTEM_DSP_LINK_ID_IPC_FRAMES_IN_0;
        }
        CaptureLink_CreateParams_Init(&capturePrm);
    
        capturePrm.numVipInst               = 4;	//xpli
        capturePrm.outQueParams[0].nextLink = mergeId[0];
    	capturePrm.outQueParams[1].nextLink = mergeId[0];
    	capturePrm.outQueParams[2].nextLink = mergeId[0];
    	capturePrm.outQueParams[3].nextLink = mergeId[0];
    //    capturePrm.outQueParams[1].nextLink = gVcapModuleContext.deiId[0];
        capturePrm.tilerEnable              = FALSE;
        capturePrm.maxBlindAreasPerCh       = 4;
    
        vipInstId=0;
        {
            pCaptureInstPrm                     = &capturePrm.vipInst[vipInstId];
            pCaptureInstPrm->vipInstId          = SYSTEM_CAPTURE_INST_VIP0_PORTA%SYSTEM_CAPTURE_INST_MAX;
            pCaptureInstPrm->videoDecoderId     = 0;			//not used
            pCaptureInstPrm->inDataFormat       = SYSTEM_DF_YUV422P;
            pCaptureInstPrm->standard           = SYSTEM_STD_1080P_30;
            pCaptureInstPrm->numOutput          = 1;
    		pCaptureInstPrm->videoIfMode        = SYSTEM_CAPT_VIDEO_IF_MODE_8BIT;		
    		pCaptureInstPrm->videoCaptureMode   = SYSTEM_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_DISCRETE_SYNC_ACTVID_VSYNC;
    		pCaptureInstPrm->inScanFormat       = SYSTEM_SF_PROGRESSIVE;
    		pCaptureInstPrm->useAdvancedParams = FALSE;
            pCaptureOutPrm                      = &pCaptureInstPrm->outParams[0];
            pCaptureOutPrm->dataFormat          = SYSTEM_DF_YUV422I_YUYV;
            pCaptureOutPrm->scEnable            = FALSE;
            pCaptureOutPrm->scOutWidth          = 0;
            pCaptureOutPrm->scOutHeight         = 0;
            pCaptureOutPrm->outQueId            = 0;
        }
    
    vipInstId=1;
        {
            pCaptureInstPrm                     = &capturePrm.vipInst[vipInstId];
            pCaptureInstPrm->vipInstId          = SYSTEM_CAPTURE_INST_VIP0_PORTB%SYSTEM_CAPTURE_INST_MAX;
            pCaptureInstPrm->videoDecoderId     = 0;			//not used
            pCaptureInstPrm->inDataFormat       = SYSTEM_DF_YUV422P;
            pCaptureInstPrm->standard           = SYSTEM_STD_1080P_30;
            pCaptureInstPrm->numOutput          = 1;
    		pCaptureInstPrm->videoIfMode        = SYSTEM_CAPT_VIDEO_IF_MODE_8BIT;		
    		pCaptureInstPrm->videoCaptureMode   = SYSTEM_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_DISCRETE_SYNC_ACTVID_VSYNC;
    		pCaptureInstPrm->inScanFormat       = SYSTEM_SF_PROGRESSIVE;
    		pCaptureInstPrm->useAdvancedParams = FALSE;
            pCaptureOutPrm                      = &pCaptureInstPrm->outParams[0];
            pCaptureOutPrm->dataFormat          = SYSTEM_DF_YUV422I_YUYV;
            pCaptureOutPrm->scEnable            = FALSE;
            pCaptureOutPrm->scOutWidth          = 0;
            pCaptureOutPrm->scOutHeight         = 0;
            pCaptureOutPrm->outQueId            = 1;
        }
    
    vipInstId=2;
        {
            pCaptureInstPrm                     = &capturePrm.vipInst[vipInstId];
            pCaptureInstPrm->vipInstId          = SYSTEM_CAPTURE_INST_VIP1_PORTA%SYSTEM_CAPTURE_INST_MAX;
            pCaptureInstPrm->videoDecoderId     = 0;			//not used
            pCaptureInstPrm->inDataFormat       = SYSTEM_DF_YUV422P;
            pCaptureInstPrm->standard           = SYSTEM_STD_1080P_30;
            pCaptureInstPrm->numOutput          = 1;
    		pCaptureInstPrm->videoIfMode        = SYSTEM_CAPT_VIDEO_IF_MODE_8BIT;		
    		pCaptureInstPrm->videoCaptureMode   = SYSTEM_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_DISCRETE_SYNC_ACTVID_VSYNC;
    		pCaptureInstPrm->inScanFormat       = SYSTEM_SF_PROGRESSIVE;
    		pCaptureInstPrm->useAdvancedParams = FALSE;
            pCaptureOutPrm                      = &pCaptureInstPrm->outParams[0];
            pCaptureOutPrm->dataFormat          = SYSTEM_DF_YUV422I_YUYV;
            pCaptureOutPrm->scEnable            = FALSE;
            pCaptureOutPrm->scOutWidth          = 0;
            pCaptureOutPrm->scOutHeight         = 0;
            pCaptureOutPrm->outQueId            = 2;
        }
    
    vipInstId=3;
        {
            pCaptureInstPrm                     = &capturePrm.vipInst[vipInstId];
            pCaptureInstPrm->vipInstId          = SYSTEM_CAPTURE_INST_VIP1_PORTB%SYSTEM_CAPTURE_INST_MAX;
            pCaptureInstPrm->videoDecoderId     = 0;			//not used
            pCaptureInstPrm->inDataFormat       = SYSTEM_DF_YUV422P;
            pCaptureInstPrm->standard           = SYSTEM_STD_1080P_30;
            pCaptureInstPrm->numOutput          = 1;
    		pCaptureInstPrm->videoIfMode        = SYSTEM_CAPT_VIDEO_IF_MODE_8BIT;		
    		pCaptureInstPrm->videoCaptureMode   = SYSTEM_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_DISCRETE_SYNC_ACTVID_VSYNC;
    		pCaptureInstPrm->inScanFormat       = SYSTEM_SF_PROGRESSIVE;
    		pCaptureInstPrm->useAdvancedParams = FALSE;
            pCaptureOutPrm                      = &pCaptureInstPrm->outParams[0];
            pCaptureOutPrm->dataFormat          = SYSTEM_DF_YUV422I_YUYV;
            pCaptureOutPrm->scEnable            = FALSE;
            pCaptureOutPrm->scOutWidth          = 0;
            pCaptureOutPrm->scOutHeight         = 0;
            pCaptureOutPrm->outQueId            = 3;
        }
    
    /*
    **dup1 link 
    **dup 2 video ques
    **pre link is cature link
    **next link is merge link
    **xpli 0123
     */
    #if 0
        dupPrm[1].inQueParams.prevLinkId    = gVcapModuleContext.captureId;
        dupPrm[1].inQueParams.prevLinkQueId = 0;
        dupPrm[1].notifyNextLink            = TRUE;
        dupPrm[1].numOutQue                 = 4;
        dupPrm[1].outQueParams[0].nextLink  = mergeId;
        dupPrm[1].outQueParams[1].nextLink  = mergeId;
        dupPrm[1].outQueParams[2].nextLink  = mergeId;
        dupPrm[1].outQueParams[3].nextLink  = mergeId;
    #endif
    
    
    /*
    **merge link 
    **merge 4 video ques to 1 video ques
    **pre link is dup1 link
    **next link is swMs link
    **xpli 0123
     */
    #if 1
        mergePrm[0].numInQue                     = 4;
        mergePrm[0].inQueParams[0].prevLinkId    = gVcapModuleContext.captureId;
        mergePrm[0].inQueParams[0].prevLinkQueId = 0;
        mergePrm[0].inQueParams[1].prevLinkId    = gVcapModuleContext.captureId;
        mergePrm[0].inQueParams[1].prevLinkQueId = 1;
        mergePrm[0].inQueParams[2].prevLinkId    = gVcapModuleContext.captureId;
        mergePrm[0].inQueParams[2].prevLinkQueId = 2;
        mergePrm[0].inQueParams[3].prevLinkId    = gVcapModuleContext.captureId;
        mergePrm[0].inQueParams[3].prevLinkQueId = 3;
        mergePrm[0].notifyNextLink               = TRUE;
        mergePrm[0].outQueParams.nextLink        = gMultiCh_VcapVencVdisObj.dupId[0];
    #endif
    
    #if 1
        dupPrm[0].inQueParams.prevLinkId    = mergeId[0];
        dupPrm[0].inQueParams.prevLinkQueId = 0;
        dupPrm[0].notifyNextLink            = TRUE;
        dupPrm[0].numOutQue                 = 2;
        dupPrm[0].outQueParams[0].nextLink  = selectId;
        dupPrm[0].outQueParams[1].nextLink  = mergeId[1];//gVdisModuleContext.displayId[1];//
    #endif
    
    
    //xpli0710
    #if 1
    	selectPrm.inQueParams.prevLinkId = gMultiCh_VcapVencVdisObj.dupId[0];
    	selectPrm.inQueParams.prevLinkQueId = 0;
    
    	selectPrm.numOutQue = 2;
    
    	selectPrm.outQueParams[0].nextLink = gVcapModuleContext.sclrId[0];
        selectPrm.outQueParams[1].nextLink = gVcapModuleContext.sclrId[1];
    
        selectPrm.outQueChInfo[0].numOutCh = 2;
        selectPrm.outQueChInfo[0].outQueId = 0;
    	
    	selectPrm.outQueChInfo[0].inChNum[0] = 0;
    	selectPrm.outQueChInfo[0].inChNum[1] = 3;
    
        selectPrm.outQueChInfo[1].numOutCh = 2;
        selectPrm.outQueChInfo[1].outQueId = 1;
    	
    	selectPrm.outQueChInfo[1].inChNum[0] = 1;
    	selectPrm.outQueChInfo[1].inChNum[1] = 2;
    
    #endif
    
    //xpli0710 
    #if 1
        sclrPrm[0].enableLineSkipSc = FALSE;
        sclrPrm[0].inputFrameRate   = 25;
        sclrPrm[0].outputFrameRate  = 25;
        sclrPrm[0].inQueParams.prevLinkId    = selectId;
        sclrPrm[0].inQueParams.prevLinkQueId = 0;
        sclrPrm[0].outQueParams.nextLink     = mergeId[2];
        sclrPrm[0].scaleMode = DEI_SCALE_MODE_RATIO;
        sclrPrm[0].outScaleFactor.ratio.heightRatio.numerator   = 1;
        sclrPrm[0].outScaleFactor.ratio.heightRatio.denominator = 3;
        sclrPrm[0].outScaleFactor.ratio.widthRatio.numerator    = 1;
        sclrPrm[0].outScaleFactor.ratio.widthRatio.denominator  = 1;
        sclrPrm[0].tilerEnable = FALSE; // force tiler disable;
        sclrPrm[0].numBufsPerCh = 4;
    	sclrPrm[0].pathId = SCLR_LINK_SC5;//SCLR_LINK_SEC0_SC3;//SCLR_LINK_SC5;
    #endif
    
    
    //xpli0710 
    #if 1
        sclrPrm[1].enableLineSkipSc = FALSE;
        sclrPrm[1].inputFrameRate   = 25;
        sclrPrm[1].outputFrameRate  = 25;
        sclrPrm[1].inQueParams.prevLinkId    = selectId;
        sclrPrm[1].inQueParams.prevLinkQueId = 1;
        sclrPrm[1].outQueParams.nextLink     = mergeId[2];
        sclrPrm[1].scaleMode = DEI_SCALE_MODE_RATIO;
        sclrPrm[1].outScaleFactor.ratio.heightRatio.numerator   = 1;
        sclrPrm[1].outScaleFactor.ratio.heightRatio.denominator = 1;
        sclrPrm[1].outScaleFactor.ratio.widthRatio.numerator    = 87;
        sclrPrm[1].outScaleFactor.ratio.widthRatio.denominator  = 192;
        sclrPrm[1].tilerEnable = FALSE; // force tiler disable;
        sclrPrm[1].numBufsPerCh = 4;
    	sclrPrm[1].pathId = SCLR_LINK_SC5;//SCLR_LINK_SEC0_SC3;
    #endif
    
    
    #if 1
        mergePrm[2].numInQue                     = 2;
        mergePrm[2].inQueParams[0].prevLinkId    = gVcapModuleContext.sclrId[0];
        mergePrm[2].inQueParams[0].prevLinkQueId = 0;
        mergePrm[2].inQueParams[1].prevLinkId    = gVcapModuleContext.sclrId[1];
        mergePrm[2].inQueParams[1].prevLinkQueId = 0;
        mergePrm[2].notifyNextLink               = TRUE;
        mergePrm[2].outQueParams.nextLink        = gVdisModuleContext.swMsId[0];
    #endif
    
    
    #if 1
    
        swMsPrm.swMsInstId[0]        = SYSTEM_SW_MS_SC_INST_VIP0_SC;
        swMsPrm.numSwMsInst          = 1;
        swMsPrm.swMsInstStartWin[0]  = 0;
        swMsPrm.swMsInstStartWin[1]  = 4;//---wp1412
        swMsPrm.enableProcessTieWithDisplay = TRUE;
            VDIS_DEV vdDevId = VDIS_DEV_HDMI;
    
            swMsPrm.inQueParams.prevLinkId     = mergeId[2];
            swMsPrm.inQueParams.prevLinkQueId  = 0;
            swMsPrm.numOutBuf                  = MULTICH_NUM_SWMS_MAX_BUFFERS;
            swMsPrm.maxInputQueLen             = SYSTEM_SW_MS_INVALID_INPUT_QUE_LEN;
            vdDevId = VDIS_DEV_HDMI;
            swMsPrm.maxOutRes              = VSYS_STD_1080P_60;
            swMsPrm.initOutRes             = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_HDMI].resolution;
    		swMsPrm.outQueParams.nextLink  = gMultiCh_VcapVencVdisObj.dupId[1];	//----wp1412
            /* low cost line skip mode of scaling can be used, when tiler is off */
    		tilerEnable = FALSE;
            if(tilerEnable)
                swMsPrm.lineSkipMode           = FALSE;
            else
                swMsPrm.lineSkipMode           = TRUE;
    
            swMsPrm.enableLayoutGridDraw = gVdisModuleContext.vdisConfig.enableLayoutGridDraw;
            MultiCh_swMsGetDefaultLayoutPrm(vdDevId, &swMsPrm, FALSE);    /* both from 0-16 chnl */
    
    
    	    displayPrm[0].inQueParams[0].prevLinkId    = gMultiCh_VcapVencVdisObj.dupId[1];
            displayPrm[0].inQueParams[0].prevLinkQueId = 0;
            displayPrm[0].displayRes                = swMsPrm.initOutRes;
    
            mulich_vdec_vdis_set_avsync_prm(&gMultiCh_VcapVencVdisObj.avsyncCfg[0],0,vdDevId);
        
    	
    
        dupPrm[1].inQueParams.prevLinkId		 = gVdisModuleContext.swMsId[0];
        dupPrm[1].inQueParams.prevLinkQueId		 = 0;
        dupPrm[1].numOutQue						 = 2;
        dupPrm[1].outQueParams[0].nextLink		 = gVdisModuleContext.displayId[0]; 
        dupPrm[1].outQueParams[1].nextLink		 = gVcapModuleContext.ipcFramesOutVpssId[0];//mergeId[1];
        dupPrm[1].notifyNextLink				 = TRUE;
    	
    #endif
    
    //xpli 0629
    /* Redirect to DSP for OSD / SCD */
            ipcFramesOutVpssPrm.baseCreateParams.inQueParams.prevLinkId   = gMultiCh_VcapVencVdisObj.dupId[1];
            ipcFramesOutVpssPrm.baseCreateParams.inQueParams.prevLinkQueId = 1;//0 xpli
            ipcFramesOutVpssPrm.baseCreateParams.outQueParams[0].nextLink  = mergeId[1];//ipcOutVpssId;*****xpli
            ipcFramesOutVpssPrm.baseCreateParams.processLink               = gVcapModuleContext.ipcFramesInDspId[0];
            ipcFramesOutVpssPrm.baseCreateParams.notifyPrevLink            = TRUE;
            ipcFramesOutVpssPrm.baseCreateParams.notifyNextLink            = TRUE;
            ipcFramesOutVpssPrm.baseCreateParams.notifyProcessLink         = TRUE;
            ipcFramesOutVpssPrm.baseCreateParams.noNotifyMode              = FALSE;
            ipcFramesOutVpssPrm.baseCreateParams.numOutQue                 = 1;
    
            ipcFramesInDspPrm.baseCreateParams.inQueParams.prevLinkId      = gVcapModuleContext.ipcFramesOutVpssId[0];
            ipcFramesInDspPrm.baseCreateParams.inQueParams.prevLinkQueId   = 0;
            ipcFramesInDspPrm.baseCreateParams.outQueParams[0].nextLink    = gVcapModuleContext.dspAlgId[0];
            ipcFramesInDspPrm.baseCreateParams.notifyPrevLink              = TRUE;
            ipcFramesInDspPrm.baseCreateParams.notifyNextLink              = TRUE;
            ipcFramesInDspPrm.baseCreateParams.noNotifyMode                = FALSE;
            ipcFramesInDspPrm.baseCreateParams.numOutQue                   = 1;
    
            dspAlgPrm.enableOSDAlg = TRUE;		//xpli
            dspAlgPrm.enableSCDAlg = FALSE;
            dspAlgPrm.inQueParams.prevLinkId = gVcapModuleContext.ipcFramesInDspId[0];
            dspAlgPrm.inQueParams.prevLinkQueId = 0;
    
    
        UInt32 chId;
        if(enableOsdAlgLink)
        {
    
            for(chId = 0; chId < ALG_LINK_OSD_MAX_CH; chId++)
            {
                AlgLink_OsdChWinParams * chWinPrm = &dspAlgPrm.osdChCreateParams[chId].chDefaultParams;
    
                /* set osd window max width and height */
                dspAlgPrm.osdChCreateParams[chId].maxWidth  = EXAMPLE_OSD_WIN_MAX_WIDTH;
                dspAlgPrm.osdChCreateParams[chId].maxHeight = EXAMPLE_OSD_WIN_MAX_HEIGHT;
    
                chWinPrm->chId = chId;
                chWinPrm->numWindows = 1;		//??xpli0629
    
            }
        }
    
    #if 1
        mergePrm[1].numInQue                     = 2;
        mergePrm[1].inQueParams[0].prevLinkId    = gMultiCh_VcapVencVdisObj.dupId[0];
        mergePrm[1].inQueParams[0].prevLinkQueId = 1;
        mergePrm[1].inQueParams[1].prevLinkId    = gVcapModuleContext.ipcFramesOutVpssId[0];
        mergePrm[1].inQueParams[1].prevLinkQueId = 0;//1;???
        mergePrm[1].notifyNextLink               = TRUE;
        mergePrm[1].outQueParams.nextLink        = gVcapModuleContext.nsfId[0];
    #endif
    
    
        NsfLink_CreateParams_Init(&nsfPrm);
        nsfPrm.bypassNsf = TRUE;
        nsfPrm.inputFrameRate  = 30;
        nsfPrm.outputFrameRate = 30;
        nsfPrm.tilerEnable     = FALSE;
        nsfPrm.inQueParams.prevLinkId    = mergeId[1];
        nsfPrm.inQueParams.prevLinkQueId = 0;
        nsfPrm.numOutQue = 1;
        nsfPrm.outQueParams[0].nextLink  = gMultiCh_VcapVencVdisObj.ipcOutVpssId;
        nsfPrm.numBufsPerCh = 6;
    
        ipcOutVpssPrm.inQueParams.prevLinkId = gVcapModuleContext.nsfId[0];
        ipcOutVpssPrm.inQueParams.prevLinkQueId = 0;
        ipcOutVpssPrm.numOutQue                 = 1;
        ipcOutVpssPrm.outQueParams[0].nextLink  = gMultiCh_VcapVencVdisObj.ipcInVideoId;
        ipcOutVpssPrm.notifyNextLink            = FALSE;
        ipcOutVpssPrm.notifyPrevLink            = TRUE;
        ipcOutVpssPrm.noNotifyMode              = TRUE;
    
        ipcInVideoPrm.inQueParams.prevLinkId    = gMultiCh_VcapVencVdisObj.ipcOutVpssId;
        ipcInVideoPrm.inQueParams.prevLinkQueId = 0;
        ipcInVideoPrm.numOutQue                 = 1;
        ipcInVideoPrm.outQueParams[0].nextLink     = gVencModuleContext.encId;
        ipcInVideoPrm.notifyNextLink            = TRUE;
        ipcInVideoPrm.notifyPrevLink            = FALSE;
        ipcInVideoPrm.noNotifyMode              = TRUE;
    
        ipcBitsOutVideoPrm.baseCreateParams.inQueParams.prevLinkId    = gVencModuleContext.encId;
        ipcBitsOutVideoPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
        ipcBitsOutVideoPrm.baseCreateParams.numOutQue                 = 1;
        ipcBitsOutVideoPrm.baseCreateParams.outQueParams[0].nextLink   = gVencModuleContext.ipcBitsInHLOSId;
        MultiCh_ipcBitsInitCreateParams_BitsOutRTOS(&ipcBitsOutVideoPrm, TRUE);
    
        ipcBitsInHostPrm[0].baseCreateParams.inQueParams.prevLinkId    = gVencModuleContext.ipcBitsOutRTOSId;
        ipcBitsInHostPrm[0].baseCreateParams.inQueParams.prevLinkQueId = 0;
        ipcBitsInHostPrm[0].baseCreateParams.numOutQue                 = 1;
        ipcBitsInHostPrm[0].baseCreateParams.outQueParams[0].nextLink   = SYSTEM_LINK_ID_INVALID;
        MultiCh_ipcBitsInitCreateParams_BitsInHLOS(&ipcBitsInHostPrm[0]);
    
        encPrm.numBufPerCh[0] = 7; //D1
        encPrm.numBufPerCh[1] = 7; //CIF
    
        {
            EncLink_ChCreateParams *pLinkChPrm;
            EncLink_ChDynamicParams *pLinkDynPrm;
            VENC_CHN_DYNAMIC_PARAM_S *pDynPrm;
            VENC_CHN_PARAMS_S *pChPrm;
    
            /* Primary Stream Params - D1 */
            for (i=0; i<gVencModuleContext.vencConfig.numPrimaryChn; 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              = VCODEC_FIELD_SEPARATED;
                pLinkChPrm->fieldMergeEncodeEnable  = FALSE;
                pLinkChPrm->enableAnalyticinfo      = pChPrm->enableAnalyticinfo;
                pLinkChPrm->enableWaterMarking      = pChPrm->enableWaterMarking;
                pLinkChPrm->maxBitRate              = pChPrm->maxBitRate;
                pLinkChPrm->encodingPreset          = pChPrm->encodingPreset;
                pLinkChPrm->rateControlPreset       = pChPrm->rcType;
                pLinkChPrm->enableSVCExtensionFlag  = pChPrm->enableSVCExtensionFlag;
                pLinkChPrm->numTemporalLayer        = pChPrm->numTemporalLayer;
    
                pLinkDynPrm->intraFrameInterval     = pDynPrm->intraFrameInterval;
                pLinkDynPrm->targetBitRate          = pDynPrm->targetBitRate;
                pLinkDynPrm->interFrameInterval     = 1;
                pLinkDynPrm->mvAccuracy             = IVIDENC2_MOTIONVECTOR_QUARTERPEL;
                pLinkDynPrm->inputFrameRate         = pDynPrm->inputFrameRate;
                pLinkDynPrm->rcAlg                  = pDynPrm->rcAlg;
                pLinkDynPrm->qpMin                  = pDynPrm->qpMin;
                pLinkDynPrm->qpMax                  = pDynPrm->qpMax;
                pLinkDynPrm->qpInit                 = pDynPrm->qpInit;
                pLinkDynPrm->vbrDuration            = pDynPrm->vbrDuration;
                pLinkDynPrm->vbrSensitivity         = pDynPrm->vbrSensitivity;
            }
    
            if (gVsysModuleContext.vsysConfig.enableSecondaryOut == TRUE)
            {
                /* Secondary Out <CIF> Params */
                for (i=gVencModuleContext.vencConfig.numPrimaryChn, j=VENC_PRIMARY_CHANNELS;
                      i<(gVencModuleContext.vencConfig.numPrimaryChn
                               + gVencModuleContext.vencConfig.numSecondaryChn);
                        i++, j++)
                {
                    pLinkChPrm  = &encPrm.chCreateParams[i];
                    pLinkDynPrm = &pLinkChPrm->defaultDynamicParams;
    
                    pChPrm      = &gVencModuleContext.vencConfig.encChannelParams[j];
                    pDynPrm     = &pChPrm->dynamicParam;
    
                    pLinkChPrm->format                  = IVIDEO_H264HP;
                    pLinkChPrm->profile                 = gVencModuleContext.vencConfig.h264Profile[i];
                    pLinkChPrm->dataLayout              = VCODEC_FIELD_SEPARATED;
                    pLinkChPrm->fieldMergeEncodeEnable  = FALSE;
                    pLinkChPrm->enableAnalyticinfo      = pChPrm->enableAnalyticinfo;
                    pLinkChPrm->enableWaterMarking      = pChPrm->enableWaterMarking;
                    pLinkChPrm->maxBitRate              = pChPrm->maxBitRate;
                    pLinkChPrm->encodingPreset          = pChPrm->encodingPreset;
                    pLinkChPrm->rateControlPreset       = pChPrm->rcType;
                    pLinkChPrm->enableSVCExtensionFlag  = pChPrm->enableSVCExtensionFlag;
                    pLinkChPrm->numTemporalLayer        = pChPrm->numTemporalLayer;
    
                    pLinkDynPrm->intraFrameInterval     = pDynPrm->intraFrameInterval;
                    pLinkDynPrm->targetBitRate          = pDynPrm->targetBitRate;
                    pLinkDynPrm->interFrameInterval     = 1;
                    pLinkDynPrm->mvAccuracy             = IVIDENC2_MOTIONVECTOR_QUARTERPEL;
                    pLinkDynPrm->inputFrameRate         = pDynPrm->inputFrameRate;
                    pLinkDynPrm->qpMin                  = pDynPrm->qpMin;
                    pLinkDynPrm->qpMax                  = pDynPrm->qpMax;
                    pLinkDynPrm->qpInit                 = pDynPrm->qpInit;
                    pLinkDynPrm->vbrDuration            = pDynPrm->vbrDuration;
                    pLinkDynPrm->vbrSensitivity         = pDynPrm->vbrSensitivity;
    
                    pLinkChPrm->overrideInputScanFormat = TRUE;
                    pLinkChPrm->fieldPicEncode          = FALSE;
    
                }
            }
    
            /* MJPEG  Params */
            if (gVsysModuleContext.vsysConfig.enableMjpegEnc == TRUE)
            {
                for (i=gVencModuleContext.vencConfig.numPrimaryChn + gVencModuleContext.vencConfig.numSecondaryChn;
                          i<(VENC_CHN_MAX); i++)
                {
                    pLinkChPrm  = &encPrm.chCreateParams[i];
                    pLinkDynPrm = &pLinkChPrm->defaultDynamicParams;
    
                    pChPrm      = &gVencModuleContext.vencConfig.encChannelParams[i];
                    pDynPrm     = &pChPrm->dynamicParam;
    
                    pLinkChPrm->format                 = IVIDEO_MJPEG;
                    pLinkChPrm->profile                = 0;
                    pLinkChPrm->dataLayout             = VCODEC_FIELD_SEPARATED;
                    pLinkChPrm->fieldMergeEncodeEnable = FALSE;
                    pLinkChPrm->enableAnalyticinfo     = 0;
                    pLinkChPrm->enableWaterMarking     = 0;
                    pLinkChPrm->maxBitRate             = 0;
                    pLinkChPrm->encodingPreset         = 0;
                    pLinkChPrm->rateControlPreset      = 0;
                    pLinkChPrm->enableSVCExtensionFlag = 0;
                    pLinkChPrm->numTemporalLayer       = 0;
    
                    pLinkDynPrm->intraFrameInterval    = 0;
                    pLinkDynPrm->targetBitRate         = 100*1000;
                    pLinkDynPrm->interFrameInterval    = 0;
                    pLinkDynPrm->mvAccuracy            = 0;
                    pLinkDynPrm->inputFrameRate        = 1;//pDynPrm->inputFrameRate;
                    pLinkDynPrm->qpMin                 = 0;
                    pLinkDynPrm->qpMax                 = 0;
                    pLinkDynPrm->qpInit                = -1;
                    pLinkDynPrm->vbrDuration           = 0;
                    pLinkDynPrm->vbrSensitivity        = 0;
                }
            }
    
            encPrm.inQueParams.prevLinkId   = gMultiCh_VcapVencVdisObj.ipcInVideoId;
            encPrm.inQueParams.prevLinkQueId= 0;
            encPrm.outQueParams.nextLink    = gVencModuleContext.ipcBitsOutRTOSId;
        }
    
        capturePrm.isPalMode = Vcap_isPalMode();
        System_linkCreate(gVcapModuleContext.captureId, &capturePrm, sizeof(capturePrm));
        System_linkCreate(mergeId[0], &mergePrm[0],sizeof(mergePrm[0]));
    	System_linkCreate(gMultiCh_VcapVencVdisObj.dupId[0], &dupPrm[0], sizeof(dupPrm[0]));
    	System_linkCreate(selectId, &selectPrm, sizeof(selectPrm));		//xpli0710
    	System_linkCreate(gVcapModuleContext.sclrId[0], &sclrPrm[0], sizeof(sclrPrm[0]));		//xpli0710
    	System_linkCreate(gVcapModuleContext.sclrId[1], &sclrPrm[1],sizeof(sclrPrm[1]));		//xpli0710
    	System_linkCreate(mergeId[2], &mergePrm[2], sizeof(mergePrm[2]));		//xpli0710
    	System_linkCreate(gVdisModuleContext.swMsId[0], &swMsPrm, sizeof(swMsPrm));
    System_linkCreate(gMultiCh_VcapVencVdisObj.dupId[1], &dupPrm[1], sizeof(dupPrm[1]));
    System_linkCreate(gVdisModuleContext.displayId[0], &displayPrm[0], sizeof(displayPrm[0]));
    #if 1
        if(enableOsdAlgLink)
        {
            System_linkCreate(gVcapModuleContext.ipcFramesOutVpssId[0], &ipcFramesOutVpssPrm, sizeof(ipcFramesOutVpssPrm));
            System_linkCreate(gVcapModuleContext.ipcFramesInDspId[0], &ipcFramesInDspPrm, sizeof(ipcFramesInDspPrm));
            System_linkCreate(gVcapModuleContext.dspAlgId[0], &dspAlgPrm, sizeof(dspAlgPrm));
        }
    #endif
    	System_linkCreate(mergeId[1], &mergePrm[1], sizeof(mergePrm[1]));
        System_linkCreate(gVcapModuleContext.nsfId[0], &nsfPrm, sizeof(nsfPrm));
        System_linkCreate(gMultiCh_VcapVencVdisObj.ipcOutVpssId , &ipcOutVpssPrm , sizeof(ipcOutVpssPrm) );
        System_linkCreate(gMultiCh_VcapVencVdisObj.ipcInVideoId , &ipcInVideoPrm , sizeof(ipcInVideoPrm) );
        System_linkCreate(gVencModuleContext.encId, &encPrm, sizeof(encPrm));
        System_linkCreate(gVencModuleContext.ipcBitsOutRTOSId, &ipcBitsOutVideoPrm, sizeof(ipcBitsOutVideoPrm));
        System_linkCreate(gVencModuleContext.ipcBitsInHLOSId, &ipcBitsInHostPrm[0], sizeof(ipcBitsInHostPrm[0]));
        MultiCh_setDec2DispMap(VDIS_DEV_HDMI,gVcapModuleContext.vcapConfig.numChn,0,0);
        MultiCh_memPrintHeapStatus();
    
        System_linkStart(gVdisModuleContext.displayId[0]);	//xpli
        System_linkStart(gVencModuleContext.ipcBitsInHLOSId);
        System_linkStart(gVencModuleContext.ipcBitsOutRTOSId);
        System_linkStart(gVencModuleContext.encId);
        System_linkStart(gMultiCh_VcapVencVdisObj.ipcInVideoId);
        System_linkStart(gMultiCh_VcapVencVdisObj.ipcOutVpssId);
        System_linkStart(gVcapModuleContext.nsfId[0]);
        System_linkStart(mergeId[1]);
    System_linkStart(gMultiCh_VcapVencVdisObj.dupId[1]);	//xpli
    System_linkStart(gVdisModuleContext.swMsId[0]);	//xpli
        System_linkStart(gMultiCh_VcapVencVdisObj.dupId[0]);	//xpli
        System_linkStart(mergeId[0]);
        System_linkStart(gVcapModuleContext.captureId);
    }

  • 可以把你的usecase图发出来吗

  • 你好,
    你配置基本是这样的,

    sclrPrm[0].pathId = SCLR_LINK_SC5;//SCLR_LINK_SEC0_SC3;//SCLR_LINK_SC5;
    sclrPrm[1].pathId = SCLR_LINK_SC5;//SCLR_LINK_SEC0_SC3;
    swMsPrm.swMsInstId[0] = SYSTEM_SW_MS_SC_INST_VIP0_SC;

    你这样配置sc模块和使用1个sc模块的效果是一样的,但是你的总体性能只达到了32帧(1080P),理论应当是60帧(1080)是没有问题的;

    你的m3vpss的主频配置是多少 ?

  • 感谢你的回复,Ternence Hsu

           文档中提到each SC can safely do - about 170MP/s processing (in TI816x)。

           我的应用情况时4ch 1080p的scalar处理,也就是SC5要处理1920*1080*4*25=207MP/s,超过了SC5的处理能力。那么可以指定不同的SC模块进行处理吗?如何在代码中指定SC的硬件处理单元?是sclrPrm.pathId吗? 还是通过其它途径?

           另外文档中提到的DDR BW是机制?

     

    祝好!

  • Hi,Ternence Hsu

          为什么这样设置效果是一样的?那具体应该怎样设置才能配置不同的SC模块,另外我的swms并不用SC功能。M3 VPSS主频250MHz。

     

    祝好!

  • xinpeng li 说:

           我的应用情况时4ch 1080p的scalar处理,也就是SC5要处理1920*1080*4*25=207MP/s,超过了SC5的处理能力。那么可以指定不同的SC模块进行处理吗?

    可以指定不同的sc模块进行出来,你这个2个sc link 可以指定不同的 path id 处理;出现错误,是你配置的结构在hdvpss中有互斥的逻辑,或者数据格式有问题;

    你可以借助swms或者dei 实现scale 的功能;可以指定到 sc1(dei内部)、sc2(deih内部)、sc4(vip1内)模块上面,

    xinpeng li 说:

            如何在代码中指定SC的硬件处理单元?是sclrPrm.pathId吗? 还是通过其它途径?

          对, 在scale link 中是这样的,dei 或者 swms 都可以的,具体参考代码就可以

  • xinpeng li 说:

          为什么这样设置效果是一样的?那具体应该怎样设置才能配置不同的SC模块,另外我的swms并不用SC功能。M3 VPSS主频250MHz。

         swms 模块是可以实现scale的效果的,你也可以使用dei模块,在内部都可以实现scale 的效果,

         M3 VPSS主频 250M ,这样没有问题,正常,(如果过低会影响hdvpss中模块的性能)