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.

[参考译文] J784S4XEVM:在单摄像头用例中、如果我们在运行时打开/关闭驱动程序、VPAC VISS 驱动程序代码将停止

Guru**** 2898950 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1640932/j784s4xevm-in-single-camera-usecase-vpac-viss-driver-code-stalls-if-we-switch-on-off-driver-during-runtime

器件型号: J784S4XEVM

您好团队:

我们的工程有一个用例、其中有 2 个输出。 其中一个以 30fps 的速率发送、另一个以 10fps 的速率发送
因此、我们每 3 帧禁用一次 10fps 输出的 FCP
现在这在多组情景下工作正常(2 个摄像头、3 个摄像头等)

但在单摄像头用例中、我们会遇到以下问题

帧 1 -->为 10fps 输出启用 FCP -->处理请求
帧 2 -->对于 10fps 输出禁用 FCP --> VISS 驱动程序进程停止

我正在分析驱动程序代码、我注意到这可能是因为处理程序对象

        if (FVID2_SOK == status)
        {
            /* HW is free, submit request to the hardware */
            /* If previous handle and current handles are same, */
            if (instObj->lastHndlObj == hObj)
            {
                if (true == instObj->initPrms.configThroughUdmaFlag)
                {
                    /* Update only dirty buffer object */
                    hObj->sameAsPrevHandle = true;
                }
                /** Set the addresses, Submit the TR
                 *  Start the pipeline */
                status = vhwaM2mVissSubmitRequest(instObj, qObj);
            }
            else
            {
                /** Last handle was not same as new handle,
                 *  so require to recofigure all HW IPs */
                status = vhwaM2mVissSetConfigInHW(instObj, qObj);

                if (FVID2_SOK == status)
                {
                    if (true == instObj->initPrms.configThroughUdmaFlag)
                    {
                        /* Update only dirty buffer object */
                        hObj->sameAsPrevHandle = false;
                    }
                    /** Last handle was not same as new handle,
                     *  so require to recofigure all HW IPs */
                    status = vhwaM2mVissSubmitRequest(instObj, qObj);
                }
            }
        }

在这里、只有当最后一个处理程序对象不同时、我们才重新配置驱动程序、否则将使用与上一个循环相同的配置
如果是多模、处理程序会不断变化。 因此、驱动程序有恒定的重新配置(CAM1 -->CAM2 -->CAM3 -->CAM1 -->CAM2 等)。
但在单凸轮中、处理程序对象保持不变
因此、即使对于帧 2、如果我们为 10fps 输出禁用了 FCP、驱动程序仍在使用启用了 FCP 的处理程序对象。 从而导致失速

您能否确认我的分析是否有效?

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Deepak:

    是的、如果后续帧的句柄相同、则许多此类配置未完成、因为假定句柄保持不变。 如果删除此条件并始终执行 ELSE 部分、则它应该起作用。  

    此致、

    Brijesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢、Brijesh。
    也可以在 TI SDK 交付中提供此用例的修复程序吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Deepak:

    这方面已经有要求、但不确定何时会成为发布的一部分。  

    BTW、为什么要关闭每个交替帧上的 FCP 输出? 为什么不能在下一个组件中忽略这些帧的处理?

    此致、

    Brijesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Brijesh

    下一个元件是忽略输出。

    但我们进行了更改以节省资源
    如果我们不处理跳过的帧、它将节省 DDR 内存带宽、CPU 使用率等

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Deepak:

    已发布的 SDK 目前不支持此功能。  

    此致、

    Brijesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这方面已经有要求、但不确定何时会成为发布的一部分。  [/报价]

    您好、Brijesh
    您能否请检查并阐明、将在哪个 SDK 版本中添加此功能?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Deepak:

    到目前为止、还没有实施此功能的计划。 您能否通过当地现场团队提出?  

    此致、

    Brijesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Brijesh
    我们决定在内部处理此问题。 我已经准备好了一个修复程序。
    您可以看一下。



    diff --git a/pdk_j784s4_10_01_00_25/packages/ti/drv/vhwa/src/drv/vhwa_m2mVissApi.c b/pdk_j784s4_10_01_00_25/packages/ti/drv/vhwa/src/drv/vhwa_m2mVissApi.c
    index b3f25ef..be8bec9 100755
    --- a/pdk_j784s4_10_01_00_25/packages/ti/drv/vhwa/src/drv/vhwa_m2mVissApi.c
    +++ b/pdk_j784s4_10_01_00_25/packages/ti/drv/vhwa/src/drv/vhwa_m2mVissApi.c
    @@ -1560,6 +1560,16 @@ static int32_t vhwaM2mVissSetParams(Vhwa_M2mVissInstObj *instObj,
         GT_assert(VhwaVissTrace, (NULL != hObj));
         GT_assert(VhwaVissTrace, (NULL != vsPrms));
     
    +    if ((hObj->isPrmsSet == (uint32_t)UTRUE) &&
    +        (0 == Fvid2Utils_memcmp(&hObj->vsPrms, vsPrms, sizeof(Vhwa_M2mVissParams))))
    +    {
    +        return FVID2_SOK;
    +    }
    +    else
    +    {
    +        instObj->lastHndlObj = NULL;
    +    }
    +
         {
             /* Calculate Blanking information */
             vhwaM2mVissCalcBlankParams(hObj, vsPrms);
    

    说明:

    • 因为,错误是当它们比较 2 个驱动程序处理程序(旧和新)时-->它们只检查指针,而不检查内部内容
    • 这个问题将在初始参数设置期间进行比较
    • (hObj->isPrmsSet ==(uint32_t) UTRUE) -->以确保不跳过第一个帧配置。
    • (0 == Fvid2Utils_memcmp (&hObj->vsPrms、vsPrms、sizeof (Vhwa_M2mVissParams))) -->(如果先前的处理程序和新的处理程序相同)。 请勿打扰覆盖它。
    • 此修复不会破坏以前的优化、也不会影响性能。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Deepak:

    当然、这一变化对我来说看起来很好。  

    此致、

    Brijesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    只需对上述补丁稍作改进即可参考

    diff --git a/pdk_j784s4_10_01_00_25/packages/ti/drv/vhwa/src/drv/vhwa_m2mVissApi.c b/pdk_j784s4_10_01_00_25/packages/ti/drv/vhwa/src/drv/vhwa_m2mVissApi.c
    index b3f25ef..3d18fef 100755
    --- a/pdk_j784s4_10_01_00_25/packages/ti/drv/vhwa/src/drv/vhwa_m2mVissApi.c
    +++ b/pdk_j784s4_10_01_00_25/packages/ti/drv/vhwa/src/drv/vhwa_m2mVissApi.c
    @@ -1560,6 +1560,16 @@ static int32_t vhwaM2mVissSetParams(Vhwa_M2mVissInstObj *instObj,
         GT_assert(VhwaVissTrace, (NULL != hObj));
         GT_assert(VhwaVissTrace, (NULL != vsPrms));
     
    +    if ((hObj->isPrmsSet == (uint32_t)UTRUE) && (hObj == instObj->lastHndlObj) &&
    +        (0 == Fvid2Utils_memcmp(&hObj->vsPrms, vsPrms, sizeof(Vhwa_M2mVissParams))))
    +    {
    +        return FVID2_SOK;
    +    }
    +    else
    +    {
    +        instObj->lastHndlObj = NULL;
    +    }
    +
         {
             /* Calculate Blanking information */
             vhwaM2mVissCalcBlankParams(hObj, vsPrms);
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Deepak:

    好的、这也没关系。  

    此致、

    Brijesh