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:调用 TIvxCaptureRegisterErrorFrame 后、当拔出所有传感器时、multi_cam 应用的 fps 由0变为9

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1230003/tda4vm-after-calling-tivxcaptureregistererrorframe-the-fps-of-multi_cam-app-is-9-instead-of-0-when-all-sensors-are-pulled-out

器件型号:TDA4VM

在 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。  

    Fullscreen
    1
    2
    3
    4
    if (((obj->captureObj.enable_error_detection) || (obj->test_mode)) && (status == VX_SUCCESS))
    {
    status = app_send_error_frame(&obj->captureObj);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    此致、

    Brijesh

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

    可以。 将  ENABLE_ERROR_DETECTION 设置为 FALSE、 在应用正常运行期间、取消拔出其中一个摄像头后 fps 将变为0、因为图形无法运行。 换句话说,我们希望以下两点。 1.没有相机,没有 fps ; 2. 小于最大摄像机数量时、fps 是正常的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    2. 小于最大摄像机数量,fps 是正常的。

    这是不可能的。 因为所有摄像机都在 CSIRX 的单个实例中运行。 如果其中一个停止工作、那么它将停止为所有通道输出帧、除非调用此 API 以输出错误帧、如果调用此 API、并且如果未连接任何摄像头、它将为所有摄像头输出错误帧。

    此致、

    Brijesh  

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

    我明白了。 当没有摄像机时,帧率将变为9。 为什么会这样? 我们是否可以更改某个值以减小该值?

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

    这是 因为它现在正在输出错误帧、而不是真正的捕获帧。 我真的很怀疑是否可以在运行时更改超时值、但即使 可以更改、应用程序也必须调用它来降低 fps、但是应用程序如何知道所有4个通道都未连接? 所以这不是简单的问题、我建议保持简单。 要么提供错误帧并在任何或所有摄像机断开连接时获取、要么不提供错误帧、这样在任何或所有摄像机断开连接时、帧率将变为0。  

    此致、

    Brijesh

x 出现错误。请重试或与管理员联系。