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