Thread:TDA4VM 中讨论的其他器件
工具/软件:
您好、TI 专家、
SDK 版本:10.1
我们编写了一个演示:(1920x1280@30fps UYVY) Capture -> LDC -> msc -> msc -> csitx (1280x720@30fps RGB888)、这个简单的演示可以运行一整晚(超过12小时)
但是、当我们所有的业务功能应用程序都在运行时、在捕获节点的出队功能将被卡住的可能性相对较高。
BRS
注意
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.
工具/软件:
您好、TI 专家、
SDK 版本:10.1
我们编写了一个演示:(1920x1280@30fps UYVY) Capture -> LDC -> msc -> msc -> csitx (1280x720@30fps RGB888)、这个简单的演示可以运行一整晚(超过12小时)
但是、当我们所有的业务功能应用程序都在运行时、在捕获节点的出队功能将被卡住的可能性相对较高。
BRS
注意
您好、xie JC、
您能否请共享代码中用于创建映像并将其传递到 LDC 节点的部分?
这不会解释为什么色度缓冲区地址为0x0。 不应该是使用 NV12映像格式创建的。
[MCU2_0] 64.236061 s: vx_zone_error:[tivxVpacLdcProcess:468] 1111LDC 输出地址0xbb842000 0x0、0x0、0x0
此致、
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, ×tamp[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, ×tamp[1], sizeof(timestamp[1])); // vxQueryReference((vx_reference)graphObj->ldcObj.output_arr[indexId], TIVX_REFERENCE_TIMESTAMP, ×tamp[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
您好、JC、
通常、您会收到任何更新的通知电子邮件。 此外、您还可以根据以下常见问题解答进一步检查通知设置。
对于组内共享账户、建议您检查该电子邮件设置、以便将收到的 E2E 通知转发给所有可能的同事。
BR、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 的寄存器。
请帮助检查。 谢谢。
问题发生后转储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小时 、没有遇到任何阻塞问题。
非常感谢。
BRS