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.

[参考译文] TDA4VM-Q1:出队时的捕获块

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1488240/tda4vm-q1-capture-block-at-dequeue

器件型号:TDA4VM-Q1
Thread:TDA4VM 中讨论的其他器件

工具/软件:

您好、TI 专家、

SDK 版本:10.1

我们编写了一个演示:(1920x1280@30fps UYVY) Capture -> LDC -> msc -> msc -> csitx (1280x720@30fps RGB888)、这个简单的演示可以运行一整晚(超过12小时)  

但是、当我们所有的业务功能应用程序都在运行时、在捕获节点的出队功能将被卡住的可能性相对较高。

我们的问题如下:
  1. 是否有办法解决此问题? 我们担心这是 DDR 资源争用引起的。
  2. 是否有办法提高捕获节点的 DDR 优先级(例如通过 UDMA)?

BRS  

注意

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

    您好、xie JC、

    您能否请共享代码中用于创建映像并将其传递到 LDC 节点的部分?  

    这不会解释为什么色度缓冲区地址为0x0。 不应该是使用 NV12映像格式创建的。  

    [MCU2_0]   64.236061 s: vx_zone_error:[tivxVpacLdcProcess:468] 1111LDC 输出地址0xbb842000 0x0、0x0、0x0

    此致、

    Brijesh

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

    您好、Brijesh、

    您能从上面的重新生成日志附件中找到问题吗?

    BRS

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

    您好、xie JC、

    日志清楚地表明色度地址错误、它不应该为0。 所以我们来检查为什么色度地址首先是0x0。  

    另外在使用 Gokul 进行调试的另一个线程上、与 LDC 的图形参数相关、这是否也是同一个应用? 是否 也在这里使用 LDC 输出作为图形参数? 如果可能、您能否分享这部分代码以供审核?  

    此致、

    Brijesh

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

    您好、 xie JC、

    因此,我看不到共享代码中的任何错误(由 Tommy 分享,谢谢)。 我有几个建议/问题..

    -在代码中,我看到你有两个图形参数,一个用于捕获输出,一个用于 LDC 输出。 我看到 捕获输出仅用于获取时间戳。 在这种情况下、您能否稍微更改代码以在获取时间戳后立即使捕获缓冲区入队? 如下所示。

    		status =vxGraphParameterDequeueDoneRef(graphObj->graph, graphObj->captureObj.graph_parameter_index, (vx_reference*)&frame, 1, &num_refs);
    		if (status != VX_SUCCESS)
    		{
    			MV_LOG_ERROR("vxGraphParameterDequeueDoneRef captureObj failed!!\n");
    			return;
    		}
    
    		vxQueryReference((vx_reference)frame, TIVX_REFERENCE_TIMESTAMP, &timestamp[0], sizeof(timestamp[0]));
    
    		status =vxGraphParameterEnqueueReadyRef(graphObj->graph, graphObj->captureObj.graph_parameter_index, (vx_reference*)&frame, 1);
    		if (status != VX_SUCCESS)
    		{
    			MV_LOG_ERROR("vxGraphParameterEnqueueReadyRef captureObj failed!!\n");
    			return;
    		}
    
    		//取原始图
    		status =vxGraphParameterDequeueDoneRef(graphObj->graph, graphObj->ldcObj.graph_parameter_index, (vx_reference*)&out_img, 1, &num_refs);
    		if (status != VX_SUCCESS)
    		{
    			MV_LOG_ERROR("vxGraphParameterDequeueDoneRef scalerObj0 failed!!\n");
    			return;
    		}
    
    		nTime_1 = tivxPlatformGetTimeInUsecs() /1000;
    
    		for (indexId = 0; indexId < graphObj->ldcObj.num_buf; indexId++)
    		{
    			//printf("image addr %p %p\n",graphObj->ldcObj.output_img[indexId],out_img);
    			if (graphObj->ldcObj.output_img[indexId] == out_img)
    			{
    				// vxQueryReference((vx_reference)graphObj->scalerObj.output[0].output_img[indexId], TIVX_REFERENCE_TIMESTAMP, &timestamp[1], sizeof(timestamp[1]));
    				// vxQueryReference((vx_reference)graphObj->ldcObj.output_arr[indexId], TIVX_REFERENCE_TIMESTAMP, &timestamp[2], sizeof(timestamp[2]));
    				add_input_to_other_graph(appObj, graphObj->ldcObj.output_arr[indexId]);//CAMERA_ORIGIN_HEIGHT);
    				break;
    			}
    		}
    
    		nTime_2 = tivxPlatformGetTimeInUsecs() /1000;
    
    		if (nTime_2 - nTime_1 > 10) {
    			printf("svcamera delta time: %llu ms\n", nTime_2 - nTime_1);
    		}
    
    		status =vxGraphParameterEnqueueReadyRef(graphObj->graph, graphObj->ldcObj.graph_parameter_index, (vx_reference*)&out_img, 1);
    		if (status != VX_SUCCESS)
    		{
    			MV_LOG_ERROR("vxGraphParameterEnqueueReadyRef scalerObj0 failed!!\n");
    			return;
    		}
    

     

    此致、

    Brijesh

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

    您好、Brijesh、

    我听说您提供了一个补丁、但我在这里看不到、您能重新发布吗?

    BRS

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

    您好、xie JC、

    不是补丁、但上面的帖子包含更改、您可以 尝试在上面的帖子中使用建议的更改吗?

    此致、

    Brijesh

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

    谢谢。

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

    奇怪的是、有时我看不到最新的回复。

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

    奇怪的是、有时在我发布新的回复之前、我无法看到最新的回复

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

    您好、JC、

    通常、您会收到任何更新的通知电子邮件。 此外、您还可以根据以下常见问题解答进一步检查通知设置。

    对于组内共享账户、建议您检查该电子邮件设置、以便将收到的 E2E 通知转发给所有可能的同事。

    https://e2e.ti.com/support/site-support-group/site-support/f/site-support-forum/692039/faq-how-do-i-subscribe-to-a-forum-and-receive-notifications-on-e2e-support-forums 

    BR、Tommy

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

    您好、Brijesh、

    我尝试进行此修改、但节点在运行一段时间后仍然阻塞。

    BRS。  

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

    尊敬的 Tommy:

    感谢您的帮助。  

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

    尊敬的谢 JC:

    在 src Intr.c 中的 API Vham_m2mLdcRegisterIsr 中、请注释掉以下代码、然后检查输出。

      /* Enable Wdtimer Error Events */
        if (FVID2_SOK == status)
        {
            vhwaIrqNum  = instObj->vhwaIrqNum;
            intdRegs    = instObj->socInfo.vpacIntdRegs;
    
            /* All Wdtimer Error Events are by default enabled */
            wdtimer_events = VHWA_LDC_WDTIMER_ERR;
    
            /* Enable HTS Interrupt in INTD Module */
            regVal1 = CSL_REG32_RD(
                &intdRegs->ENABLE_REG_LEVEL_VPAC_OUT[vhwaIrqNum][3U]);
            regVal1 |= wdtimer_events;
            CSL_REG32_WR(&intdRegs->ENABLE_REG_LEVEL_VPAC_OUT[vhwaIrqNum][3U],
                regVal1);
        }

    此致、

    Brijesh

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

    您好、Brijesh、

    为 LDC 禁用 WDG 后、仍然可以重现此问题。

    根据您的建议、我们添加日志以打印输入和输出缓冲区地址、并转储 LDC 的寄存器。

    请帮助检查。 谢谢。

    e2e.ti.com/.../test1.log

    问题发生后转储2次。

    e2e.ti.com/.../ldc_2D00_reg.txt

    此致

    Joe

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

    您好 Joe、

    肯定有 LDC 挂起、因为 Reg_0x0F008004 = 0x00000001。 这表明 LDC 被卡住。  

    如前所述、我错过了另外一个需要禁用 WDG 的地方。 在文件 packages\ti\drv\vhwa\wham\drv\vhw_m2mLdcApi.c 中 、在 src vhwaM2mLdcSetHtsCfg 中、请通过将 enableWdTimer 设置为 false 来禁用 WDG?

     htsCfg->pipeline = instObj->pipel;
    htsCfg->enableHop =(uint32_t) UFALSE;
    htsCfg->numHop = 0u;
    htsCfg->enableWdTimer =(uint32_t) UFALSE ;

    此致、

    Brijesh
     

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

    您好、Brijesh、

    通过应用您和 Joe 提供的补丁(如下所示)、我们已经测试了12小时 、没有遇到任何阻塞问题。

    e2e.ti.com/.../diff1.txt

     非常感谢。

    BRS

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

    这是很好的新 xie JC。 有关该主题的任何其他问题? 或者我们可以关闭它?

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

    您好、Brijesh、

    是的、我们可以关闭该主题。

    BRS