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 的8.1sdk 中、调用 TIvxCaptureRegisterErrorFrame 后、 当 所有传感器都被拉出时、multi_cam 应用的 fps 为9、而不是0。 为什么会这样呢? 我们应该如何修复这个错误?
您好!
可能只是 上次跑步的 fps、您能不能让统计数据出现几次、然后它应该变为0。
Rgds、
Brijesh
我们再次为电路板通电、未连接摄像头。 运行 multi_cam 应用程序后、fps 始终为9。
您好!
这种情况不会发生。 您能分享完整的统计数据吗?
此致、
Brijesh
成像中的传感器 DRV 代码如下所示:
静态 int32_t YhSensor_Init (IssSensors_Handle * pSensorHandle)
{
int32_t status = 0、temp_status = 0;
uint16_t 通道;
YhSensorInfo_t * yhSensorInfo = NULL;
IssSensor_CreateParams *pCreatePrms = NULL;
pCreatePrms = pSensorHandle->createPrms;
yhSensorInfo =(YhSensorInfo_t *) pSensorHandle->pYhSensorInfo;
如果(yhSensorInfo->used)
{
yhSensorInfo->state = YH_SENSOR_STATE_POWERON;
对于(Chid = 0;Chid < pCreatePrms->num_channels;Chid++)
{
temp_status = pSensorHandle->sensorFxns->powerOn (Chid、(void *) pSensorHandle);
if (temp_status!= 0)
{
STATUS = 1;
appLogPrintf ("传感器%s 在通道%d 上通电失败\n"pCreatePrms->name、Chid);
//中断;
}
}
如果(0 = TEMP_STATUS)
{
appLogPrintf ("[Yihang]::传感器%s 配置\n"、pCreatePrms->name);
yhSensorInfo->state = YH_SENSOR_STATE_CONFIG;
对于(Chid = 0;Chid < pCreatePrms->num_channels;Chid++)
{
temp_status = pSensorHandle->sensorFxns->config (Chid、(void *) pSensorHandle、pCreatePrms->sensorInfo.features);
if (temp_status!= 0)
{
STATUS = 1;
appLogPrintf ("传感器%s 配置通道%d 失败\n"、pCreatePrms->name、Chid);
//中断;
}
}
}
如果(0 = TEMP_STATUS)
{
appLogPrintf ("[Yihang]::传感器%s 探测器\n"、pCreatePrms->name);
yhSensorInfo->state = YH_SENSOR_State_probe;
对于(Chid = 0;Chid < pCreatePrms->num_channels;Chid++)
{
temp_status = pSensorHandle->sensorFxns->probe (Chid、(void *) pSensorHandle);
if (temp_status!= 0)
{
STATUS = 1;
appLogPrintf ("传感器%s 探测通道%d 失败\n"、pCreatePrms->name、Chid);
//中断;
}
}
}
如果(0 = STATUS)
{
yhSensorInfo->state = YH_SENSOR_STATE_STREAM_ON;
对于(Chid = 0;Chid < pCreatePrms->num_channels;Chid++)
{
pSensorHandle->sensorFxns->yhGetInternalParms (Chid、(void *) pSensorHandle);//更改位置以在20230421上快速流传输
}
}
方案
{
yhSensorInfo->state = YH_SENSOR_State_FAILED;
}
appLogPrintf ("[Yihang]::传感器%s 配置结束且状态为%d\n"、pCreatePrms->name、yhSensorInfo->state);
}
返回状态;
}
vision_apps 中 multi_cam 应用的代码涉及 enable_error_detection、如下所示:
静态 vx_status app_verify_graph (AppObj *obj)
{
Vx_STATUS = Vx_SUCCESS;
状态= vxVerifyGraph (obj->graph);
if (status == vx_Success)
{
APP_printf ("图形验证已完成!\n");
}
if (((obj->captrureObj.enable_error_detection))&&(status == vx_Success))
{
status = APP_SEND_ERROR_FRAME (&obj->CaptureObj);
}
/*等待一段时间以清除打印*/
tivxTaskWaitMsecs(100);
返回状态;
}
静态 vx_status app_run_graph (AppObj * obj)
{
Vx_STATUS = Vx_SUCCESS;
SensorObj *sensorObj =&obj->sensorObj;
vx_int32 frame_id;
int32_t ch_mask = obj->sensorObj.ch_mask;
obj->main_task_exit_FLAG = vx_false_e;
APP_PROFILE_PARAMS_DEFAULTS (obj);
APP_printf ("app_pipient_params_defaults"已返回\n");
if (NULL == sensorObj->sensor_name)
{
printf ("传感器名称为 NULL \n");
返回 vx_failure;
}
//如果启用了 TEST_MODE,则传感器初始化失败时,程序不会失败
if ((obj->captrureObj.enable_error_detection)))
{
appStartImageSensor (sensorObj->sensor_name、ch_mask、sensorObj->fps);
}
方案
{
状态= appStartImageSensor (sensorObj->sensor_name、ch_mask、sensorObj->fps);
APP_printf ("appStartImageSensor 返回且状态为:%d\n"、status);
}
multi_cam 应用程序的日志如下:
应用程序:初始化... !!!
内存:初始化... !!!
MEM:已初始化 DMA 堆(fD=28)!!!
内存:初始化... 完成!!!
IPC:初始化... !!!
IPC:初始化... 完成!!!
remote_service: init…… !!!
remote_service: init…… 完成!!!
18.020415s:GTC 频率= 0MHz
应用程序:初始化... 完成!!!
18.020481 s:vx_zone_init:已启用
18.020484 s:vx_zone_error:Enabled
18.020486 s:vx_zone_warning:已启用
18.020996 s:vx_zone_init:[tivxInitLocal:130]初始化已完成!!
18.021161 s:vx_zone_init:[tivxHostInitLocal:86]已为主机完成初始化!!
Child 当前进程名:VX_APP_YH_MULTI_CAM_TRIGGER.out
runRecv 路径为/tmp/yh_monitorserver.sun
18.021897 s : ISS:枚举传感器... !!!
18.022324 s : ISS:枚举传感器... 找到0: AR0233
所选传感器:AR0233
查询 AR0233
18.022334 S: ISS:查询传感器[AR0233].. !!!
18.022651 s : ISS:查询传感器[AR0233]... 完成!!!
Z:app_viss_module、configure_viss_params 运行。
Z:app_viss_module、configure_viss_params 完成。
Z:app_viss_module、configure_DCC_params 运行。
Z:APP_VISS_MODULE、获取 DCC_buffer_size=44941
Z:APP_VISS_MODULE、CONFIG_DCC_PARAMS 完成。
Z:APP_aewb_MODULE、CONFIG_DCC 运行。
Z:app_aewb_module、获取 DCC_buffer_size=37587
Z:APP_aewb_MODULE、CONFIG_DCC、DCC_CONFIG_ARR、SET REF STATUS=0
Z:APP_aewb_MODULE、CONFIG_DCC、DCC_CONFIG、SET REF STATUS=0
z:app_aewb_module、configure_dcc、before while ch=0、ch_mask=7
Z:APP_aewb_MODULE、CONFIG_DCC 完成。
Z:app_aewb_module、configure_aewb 运行。
Z:app_aewb_module、configure_aewb 完成。
Z:app_viss_module、app_create_graph_viss 运行
Z:app_viss_module、app_create_graph_viss、一些版本会运行。
Z:app_viss_module、app_create_graph_viss 完成
Z:app_aewb_module、app_create_graph_aewb run
Z:app_aewb_module、app_create_graph_aewb 完成
[2021/03/23 07:49:37:622][monitorclient.c 51] N: client connect ok (2021/03/23 07:49:37:622][monitorclient.c 51]否:客户端连接正常
图:APP_MULTI_CAM_GRACE (#nodes = 3、#executations = 0)
Node:CAPTURE1:CAPTURE_NODE:Avg = 0 usecs、最小/最大= 18446744073709551 / 0 usecs、#executations = 0
Node:VPAC_VISS_NODE:Avg = 0 usecs、min/max = 18446744073709551/0 usecs、#executations = 0
节点:IPU1-0:aewb_node:Avg = 0 usecs、最小/最大= 18446744073709551 / 0 usecs、#executations = 0
PERF:总计:Avg = 0 usecs、最小/最大= 4294967295 / 0 usecs、#executations = 0
PERF:总计:0。 0 FPS
18.247616 s:TOTAL_PERF.avg 为0
18.338898 s:--------------- [Yihang]:::摄像机状态结束--------------------------------------------------------
图:APP_MULTI_CAM_GRACE (#nodes = 3、#executations = 94)
Node:CAPTURE1:CAPTURE_NODE:Avg = 89457 usecs、min/max = 89116 / 90122 usecs、#executations = 94
Node:VPAC_VISS_NODE:Avg = 15506 usecs、min/max = 15248/16809 usecs、#executations = 94
Node:IPU1-0:aewb_node:Avg = 3543 usecs、min/max = 1270 / 34389 usecs、#executations = 94
PERF:总计:Avg = 105247 usecs、最小/最大= 104432 / 107499 usecs、#executations = 95
性能:总计:9.50 FPS
28.247699 s:--------------- [Yihang]:::摄像机状态结束--------------------------------------------------------
图:APP_MULTI_CAM_GRACE (#NOTES = 3、#executations = 178)
Node:CAPTURE1:CAPTURE1:CAPTURE_NODE:Avg = 89442 usecs、min/max = 89116 / 90122 usecs、#executations = 178
Node:VPAC_VISS_NODE:Avg = 15514 usecs、min/max = 15248/18250 usecs、#executions = 178
节点:IPU1-0:aewb_node:Avg = 11697 usecs、最小值/最大值= 1270 / 1384346 usecs、#executations = 178
PERF:总计:平均值=119548 usecs、最小值/最大值= 104108 / 1295885 usecs、#executations = 83
性能:总计:8.36 FPS
38.247666秒:------------------------------------------------------- [Yihang]:::摄像机状态结束--------------------------------------------------------
图:APP_MULTI_CAM_GRACE (#NOTES = 3、#executations = 273)
Node:CAPTURE1:CAPTURE_NODE:Avg = 89410 usecs、min/max = 89116 / 90122 usecs、#executations = 273
Node:VPAC_VISS_NODE:Avg = 15489 usecs、min/max = 15248/18250 usecs、#executations = 273
Node:IPU1-0:aewb_node:Avg = 9125 usecs、min/max = 1270 / 1384346 usecs、#executations = 273
PERF:总计:Avg = 105054 usecs、最小值/最大值= 103980 / 105971 usecs、#executations = 95
性能:总计:9.51 FPS
48.247675秒:---------------- [Yihang]:::摄像机状态结束--------------------------------------------------------
图:APP_MULTI_CAM_GRACE (#nodes = 3、#executations = 369)
Node:CAPTURE1:CAPTURE_NODE:Avg = 89403 usecs、min/max = 89116 / 90122 usecs、#executations = 369
Node:VPAC_VISS_NODE:Avg = 15476 usecs、min/max = 15248 / 18250 usecs、#executations = 369
Node:IPU1-0:aewb_node:Avg = 7862 usecs、min/max = 1270 / 1384346 usecs、#executations = 369
PERF:总计:Avg = 105081 usecs、最小/最大= 104113 / 106171 usecs、#executations = 96
性能:总计:9.51 FPS
58.247839 s:------------------------------------------------------- [Yihang]:::摄像机状态结束--------------------------------------------------------
这可能来自捕获模块中注册的错误帧、您能否尝试 在 vision_apps\modules\src\app_capture_module.c 文件中注释掉对 TIvxCaptureRegisterErrorFrame API 的调用?
此致、
Brijesh
VX_STATUS APP_SEND_ERROR_FRAME (CaptureObj * CaptureObj)
{
Vx_STATUS = Vx_SUCCESS;
vx_reference error_FRAME_image;
// status = TIvxCaptureRegisterErrorFrame (captureObj->node、(vx_reference) captureObj->error_FRAW_IMAGE);
if (CaptureObj->capture_format == 0)
{
ERROR_FRAME_IMAGE =(VX_REFERENCE) CaptureObj->ERROR_FRAME_RAW_IMAGE;
}
方案
{
ERROR_FRAME_IMAGE =(VX_REFERENCE) CaptureObj->ERROR_FRAME_IMAGE;
}
STATUS = TIvxCaptureRegisterErrorFrame (captrureObj->node、error_FRAME_image);
返回状态;
}
是的、请注释掉对 API TIvxCaptureRegisterErrorFrame 的所有调用、甚至是第二个调用。 或者、如果可能、请 在多摄像头应用程序的 main.c 文件中将 ENABLE_ERROR_DETECTION 标志设置为 FALSE。
if (((obj->captureObj.enable_error_detection) || (obj->test_mode)) && (status == VX_SUCCESS)) { status = app_send_error_frame(&obj->captureObj); }
此致、
Brijesh
可以。 将 ENABLE_ERROR_DETECTION 设置为 FALSE、 在应用正常运行期间、取消拔出其中一个摄像头后 fps 将变为0、因为图形无法运行。 换句话说,我们希望以下两点。 1.没有相机,没有 fps ; 2. 小于最大摄像机数量时、fps 是正常的。
2. 小于最大摄像机数量,fps 是正常的。
这是不可能的。 因为所有摄像机都在 CSIRX 的单个实例中运行。 如果其中一个停止工作、那么它将停止为所有通道输出帧、除非调用此 API 以输出错误帧、如果调用此 API、并且如果未连接任何摄像头、它将为所有摄像头输出错误帧。
此致、
Brijesh
我明白了。 当没有摄像机时,帧率将变为9。 为什么会这样? 我们是否可以更改某个值以减小该值?
这是 因为它现在正在输出错误帧、而不是真正的捕获帧。 我真的很怀疑是否可以在运行时更改超时值、但即使 可以更改、应用程序也必须调用它来降低 fps、但是应用程序如何知道所有4个通道都未连接? 所以这不是简单的问题、我建议保持简单。 要么提供错误帧并在任何或所有摄像机断开连接时获取、要么不提供错误帧、这样在任何或所有摄像机断开连接时、帧率将变为0。
此致、
Brijesh