TI中文支持网
TI专业的中文技术问题搜集分享网站

DM8148调用System_linkStart(displayId)运行失败

请帮忙分析一下:
在DM8148EVM板子上面运行 System_linkStart(displayId); 失败
 
错误打印:
[m3vpss ]  58230: DISPLAY: Start in progress !!!
[m3vpss ]  58231: Assertion @ Line: 1380 in links_m3vpss/display/displayLink_drv.c: status == FVID2_SOK : failed !!!
status = FVID2_start(pObj->displayHndl, NULL);
 
程序运行:
Chains_displayCtrlInit(chainsCfg->displayRes);                                  —–>       执行通过
System_linkCreate(displayId, &displayPrm, sizeof(displayPrm));          —–>       执行通过
System_linkStart(displayId);                                                               —–>       失败
 
代码配置:
Void Chains_singleChGrpx(Chains_Ctrl *chainsCfg)
{
    CaptureLink_CreateParams            capturePrm;
    CaptureLink_VipInstParams           *pCaptureInstPrm;
    CaptureLink_OutParams               *pCaptureOutPrm;
    DisplayLink_CreateParams            displayPrm;
 
    UInt32 captureId;
    UInt32 displayId;
 
    CHAINS_INIT_STRUCT(CaptureLink_CreateParams,capturePrm);
    CHAINS_INIT_STRUCT(DisplayLink_CreateParams,displayPrm);
 
    captureId = SYSTEM_LINK_ID_CAPTURE;
    displayId = SYSTEM_LINK_ID_DISPLAY_0;
 
    CaptureLink_CreateParams_Init(&capturePrm);
 
    capturePrm.numVipInst = 1;
    capturePrm.tilerEnable = FALSE;
    capturePrm.enableSdCrop             = FALSE;
{
    pCaptureInstPrm                     = &capturePrm.vipInst[0];
    pCaptureInstPrm->vipInstId          = SYSTEM_CAPTURE_INST_VIP0_PORTA;
    pCaptureInstPrm->videoDecoderId     = SYSTEM_DEVICE_VID_DEC_TVP7002_DRV;
    pCaptureInstPrm->inDataFormat       = SYSTEM_DF_YUV422P;
    pCaptureInstPrm->standard           = SYSTEM_STD_720P_60;
    pCaptureInstPrm->numOutput          = 1;
    pCaptureOutPrm                      = &pCaptureInstPrm->outParams[0];
    pCaptureOutPrm->dataFormat          = SYSTEM_DF_YUV422I_YUYV;
    pCaptureOutPrm->scEnable            = FALSE;
    pCaptureOutPrm->scOutWidth          = 0;
    pCaptureOutPrm->scOutHeight         = 0;
    pCaptureOutPrm->outQueId            = 0;
}
    capturePrm.outQueParams[0].nextLink = displayId;
 
    displayPrm.inQueParams[0].prevLinkId    = captureId;
    displayPrm.inQueParams[0].prevLinkQueId = 0;
    displayPrm.displayRes                   = VSYS_STD_720P_60;
 
    System_linkCreate(captureId, &capturePrm, sizeof(capturePrm));
    chainsCfg->displayRes[0] = VSYS_STD_720P_60;
    chainsCfg->displayRes[1] = VSYS_STD_720P_60;
    chainsCfg->displayRes[2] = VSYS_STD_720P_60;
    Chains_displayCtrlInit(chainsCfg->displayRes);
    System_linkCreate(displayId, &displayPrm, sizeof(displayPrm));
    Chains_memPrintHeapStatus();
    {
        System_linkStart(displayId);
        System_linkStart(captureId);
        while(1)
        {
            ch = Chains_menuRunTime();
            if(ch=='0')
                break;
            if(ch=='p') {
                System_linkControl(captureId, CAPTURE_LINK_CMD_PRINT_ADV_STATISTICS, NULL, 0, TRUE);
                System_linkControl(displayId, DISPLAY_LINK_CMD_PRINT_STATISTICS, NULL, 0, TRUE);
            }
        }
        System_linkStop(captureId);
        System_linkStop(displayId);
    }
    System_linkDelete(captureId);
    System_linkDelete(displayId);
    Chains_displayCtrlDeInit();
}
 
请大家帮忙分析一下,非常的感谢!
xubbwd@gmail.com
binbin xu1:

回复 Robin Edson:

谢谢 Robin Edson的回复;

这个断言的位置是:
DVRRDK_03.00.00.00/dvr_rdk/mcfw/src_bios6/links_m3vpss/display/displayLink_drv.c中的

Int32 DisplayLink_drvStart(DisplayLink_Obj * pObj)
{
    Int32 status = FVID2_SOK;
#ifdef SYSTEM_DEBUG_DISPLAY
    Vps_printf(" %d: DISPLAY: Start in progress !!!\n", Utils_getCurTimeInMsec());
#endif
    pObj->lastCbTime = Utils_getCurTimeInMsec();
    pObj->startTime = Utils_getCurTimeInMsec();
    pObj->prevTime = pObj->startTime;
    if(pObj->prd.clkStarted)
    {
        Clock_stop(pObj->prd.clkHandle);
        pObj->prd.clkStarted = FALSE;
    }
    status = FVID2_start(pObj->displayHndl, NULL);
    UTILS_assert(status == FVID2_SOK);
    pObj->isDisplayRunning = TRUE;
    pObj->totalTime = Utils_getCurTimeInMsec();
#ifdef SYSTEM_DEBUG_DISPLAY
    Vps_printf(" %d: DISPLAY: Start Done !!!\n", Utils_getCurTimeInMsec());
#endif
    return status;
}
 
把这个FVID2_start跟到hdvpss里面的vps里面是在
DVRRDK_03.00.00.00/ti_tools/hdvpss/hdvpss_01_00_01_37_patched/packages/ti/psp/vps/drivers/display/src/vpsdrv_display.c中的
static Int32 vpsDdrvStartIoctl(VpsDdrv_InstObj *instObj, Ptr cmdArgs) 函数中1452行左右(我添加大部分测试打印)

    if (FVID2_SOK == retVal)
    {
        /* Start display */
        instObj->state.isStarted = TRUE;
        retVal = Dc_startClient(instObj->dcHandle);
        if (FVID2_SOK != retVal)
        {
            GT_0trace(VpsDdrvDispTrace, GT_ERR, "Start client failed\n");
        }
    }
//Dc_startClient(instObj->dcHandle);的返回值错误
 
板子在调试Graphics的osd部分可以正常的通过HDMI显示argb的数据,画面正常。
请问display start失败,还有可以是其他问题的原因吗?

binbin xu1:

回复 Robin Edson:

谢谢 Robin Edson;问题已经解决了,底层是没有问题的,还是我上层的配置的问题;在Chains_displayCtrlInit(chainsCfg->displayRes);中的参数没有配置对;不能直接用默认的参数;

xing lixing:

回复 binbin xu1:

我也碰到这个问题,大神能不能请教一下

jensen zhang:

回复 binbin xu1:

你好!我也遇到同样的问题,能具体描述下你是怎样配置的才纠正这个问题的呢? 先谢谢啦!

赞(0)
未经允许不得转载:TI中文支持网 » DM8148调用System_linkStart(displayId)运行失败
分享到: 更多 (0)