J6B vio scenario sample
1. 功能概述本文的 sample 实现单路、多路 VIO 通路接入和处理以下介绍 1V、2V、6V 接入的场景。1.1. 软件架构说明调用 VIO API 来实现整个数据通路实现多路 camera 接入。同时能够 dump 每一路数据的图像。 软件控制图如下1.2. 硬件数据流说明每个场景的图中已经标明硬件连接关系。备注运行 sample 示例需要硬件外设满足场景图中的硬件连接关系如果不满足则需要根据当前的硬件连接更改配置文件 hb_j6dev.json 或更换硬件外设。 修改配置文件参考VIN 配置 章节。1V 场景如下2V 场景如下6V 场景如下1.3. 代码位置及目录结构sample 代码位置在 SDK 工程目录 {sdk_dir}/test/samples/platform_samples/source/S83_Sample/S83E04_Module/vio_scenario_sample。根目录包含 Kconfig 和外部接口的 Makefile Kconfig 用于控制该 sample 是否加入整体编译cfg 目录中包含了本 sample 使用到的 JSON 配置文件src 目录下的 vio_scenario_sample.c 是 main 入口的所在文件。1.4. API 流程说明API 流程图如下主干代码int main(int argc, char *argv[]) { int ret 0; pthread_t thid[HB_VIO_PIPELINE_MAX]; uint32_t pipe_id[HB_VIO_PIPELINE_MAX]; signal(SIGINT, get_exit_signal); // get opts ret get_opts_for_vio(argc, argv);如果不做单独的 sensor 开关流上面代码中的 hb_cam_start 和 hb_cam_stop 可不调用hb_vio_start_pipeline 和 hb_vio_stop_pipeline 已经对应包含了 sensor 开关流功能。其他 sample 文档中涉及这两对 api 的代码的解释同上具体可参考 VIO 应用处理接口 。获取数据及释放数据的代码int vio_worker_func(uint32_t pipe_id, int loop_count) { int ret 0, recovery_time 0; pthread_t recov_thid[HB_VIO_PIPELINE_MAX]; pym_buffer_v3_t pym_buf; VIO_DATA_TYPE_E pym_data_type; pym_data_type HB_VIO_PYM_DATA_V3; struct timeval recovery_start_time, recovery_current_time; #ifdef ENABLE_HBPLAYER PYM_LAYER_TYPE pym_layer_type (PYM_LAYER_TYPE)g_pym_show_layer;2. 编译2.1. 编译环境本 sample 的编译环境使用 SDK 中的 build 工具请参考 Build 环境建立。2.2. 编译说明本 sample 编译需要 VPS 系统相关的头文件#include hb_vin_data_info.h #include hb_vpm_data_info.h #include hb_vio_interface.h编译依赖的库有如下LIBS -lvio -lpthread -lalog -lhbmem编译命令# 进入SDK所在目录{sdk_dir}并source构建环境参见上。 # 编译本sample: bdm libvio-scenario-sample # 输出文件: {sdk_dir}/install/aarch64le/sample/S83_Sample/S83E04_Module/vio_scenario_sample3. 运行3.1. 支持平台J6B Plus Evm3.2. 硬件环境搭建接口连接如下模组联创模组 OVX8D、IMX623LONGHORN-ISX031。连接方式 一路 OVX8D FOV120 通过 4 合 1 线束的 C 口连接到板子的 DES1一路 IMX623 FOV60 通过 4 合 1 线束的 D 口连接到板子的 DES1四路 ISX031 通过 4 合 1 线束的 ABCD 口连接到板子的 DES2。3.3. 板端部署及配置刷写系统软件镜像后本 sample 的可执行文件位于板端 /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/bin/需要用到的配置文件位于板端 /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/。3.4. 运行指南3.4.1.运行方法1V 测试命令/app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/bin/vio_scenario_sample \ -v /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/Scenario_1V_cpe0_sen_cim0_isp0_pym0_mode2_sample/vpm_config.json \ -c /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/case_j6evm/1V_OVX8D_RX0/hb_j6dev_plus.json -m 1 -l 1000 -s 102V 测试命令/app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/bin/vio_scenario_sample \ -v /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/Scenario_2V_cpe0_sen_x8d_imx623_cim0_isp0_pym0_mode1_sample/vpm_config.json \ -c /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/case_j6evm/2V_OVX8D_IMX623_RX0/hb_j6dev.json -m 3 -l 1000 -s 106V 测试命令/app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/bin/vio_scenario_sample \ -v /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/Scenario_6V_cpe04_sen_cim04_isp0_pym04_sample/vpm_config.json \ -c /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/case_j6evm/6V_1xOVX8D_1xIMX623_RX0_4xISX031_RX4_SYNC/hb_j6dev.json -m 63 -l 1000 -s 63.4.2.运行命令行说明vio_scenario_sample应用程序名字。下面的表格是具体参数的说明例如上面的 1V 测试命令/app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/bin/vio_scenario_sample \ -v /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/Scenario_1V_cpe0_sen_cim0_isp0_pym0_mode2_sample/vpm_config.json \ -c /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/case_j6evm/1V_OVX8D_RX0/hb_j6dev_plus.json -m 1 -l 1000 -s 10-v 参数是 /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/Scenario_1V_cpe0_sen_cim0_isp0_pym0_mode2_sample/vpm_config.json代表 VIO 配置文件的所在位置json 里面的具体配置可参考 VPM 配置-c 参数是 /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/case_j6evm/1V_OVX8D_RX0/hb_j6dev_plus.json代表 camera 的配置文件的所在位置json 里面的具体配置可参考 J6X Camera 配置说明-m 参数是 1表示使能 pipe0 数据流-l 参数是 1000表示获取 PYM 数据 1000 帧-s 参数是 10表示 dump 前面 10 帧 PYM 的数据。除了上述已有参数外可增加 -t 参数例如 -t 50000 表示程序最长运行时间为 50000ms。 当 -t 参数与 -l 参数同时使用时各线程在满足其中任意一个条件即已获取指定的 PYM 数据帧数或者已达到指定的运行时间后就会退出一般情况下不建议同时使用这两个参数。可增加 -e 参数例如 -e 2 表示通过 hbplayer 看图工具显示 PYM ds 层第 2 层。可增加 -r 参数例如 -r 1 表示开启自恢复模式在热拔插后能够进行自恢复支持最长 15s15s 后没插上就自动报错退出。1.21.3.4.3.运行结果说明程序运行时通过下面的命令可以看到每个 IP 的帧率如果不开 dump帧率符合预期则程序正常运行。cat /sys/class/vps/flow/fps上面的命令只能间隔一秒以上执行一次过快执行帧率数据会变成 0。1V 测试结果帧率如下2V 测试结果帧率如下6V 测试结果帧率如下以 6V 测试为例通过 -t 5000 指定运行时间为 5000ms测试结果如下5000ms 后线程正常退出。 其他场景下使用 -t 参数的现象均类似不再赘述。可以通过 -r 1 开启自恢复模式此时在摄像头意外断开连接后各 pipe 在报错的同时将尝试进行自恢复操作。当恢复正常连接后各 pipe 将在当前 loop 报错结束、下一次 loop 到来后正常取流不再继续报错若选择通过 hbplayer 工具进行看图hbplayer 将在自恢复成功后继续正常显示实时图像。其他场景下使用 -r 参数选择是否开启自恢复模式的现象均类似不再赘述。3.4.4.运行可变更说明3.4.4.1.帧率变更本 sample 中各个 pipe 的帧率可以通过改动配置文件内容实现。如果需要帧率为 25fps可直接修改所使用的 vpm_config.json 各 pipe 指定的 lpwm.json 文件中的 period 参数为 40000即 40.000mslpwm.json 配置文件中其他参数的功能说明和设置方法可参考 LPWM 使用 。以 6V 测试为例本 sample 提供了设为 LPWM 使用 中 25fps 场景推荐使用配置的 lpwm_25fps.json 文件 /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/case_j6evm/6V_1xOVX8D_1xIMX623_RX0_4xISX031_RX4_SYNC/lpwm_25fps.json 及指定使用该 lpwm.json 的 vpm_config.json 文件 /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/Scenario_6V_cpe04_sen_cim04_isp0_pym04_sample/vpm_config.json 可以直接使用或参考修改此外camera 配置文件 hb_j6dev.json 中各 port 的 fps 参数也需要对应更改为 25或者可以直接使用环境变量选择帧率情形export CAM_CONFIG_SELECTconfig_25fps综上6V 25fps 场景的完整测试命令如下export CAM_CONFIG_SELECTconfig_25fps /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/bin/vio_scenario_sample \ -v /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/Scenario_6V_cpe04_sen_cim04_isp0_pym04_sample/vpm_config_25fps.json \ -c /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/case_j6evm/6V_1xOVX8D_1xIMX623_RX0_4xISX031_RX4_SYNC/hb_j6dev.json -m 63 -l 1000 -s 6查看 6V 运行时的实时帧率为预期的 25fps如果不需要 25fps那么执行如下命令取消环境变量再跑测试命令。unset CAM_CONFIG_SELECT其他场景修改帧率的方法和过程均类似不再赘述。用户可在 camera 的配置文件中增加指定效果库文件不配置或空时使用默认例如指定 lib_CW_OX8DGB_AST1_065_L.so port_0: { sensor_name: ovx8dstd, calib_lname: lib_CW_OX8DGB_AST1_065_L.so, serial_addr: 0x41, sensor_addr: 0x11, eeprom_addr: 0x51, sensor_mode: 5, fps: 30, width: 3840, height: 2160,本 sample 提供了此场景下的 hb_j6dev.json 供参考位于 /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/case_j6evm/6V_1xOVX8D_1xIMX623_RX0_4xISX031_RX4_SYNC/hb_j6dev.json 。3.4.5.看图结果Dump 出的数据保存在当前目录下例如上文中的 6V 测试命令执行后以 960x640_pipe5_pym_ds1_f2_roi_2.yuv 为例该文件名具体代表宽 960高 640 的 pipe5 PYM ds1 层输出图像的第 2 帧f2对应 loop 次数为 2roi_2。需要额外说明的是由于收敛时间各 pipe 的前几帧图像可能出现效果不佳情况属于正常现象具体帧数也与实际模组有关用户关注和使用后续正常帧即可。此外由于实际分配 buffer 时内存需要 16 对齐当用户配置文件中设置的图像尺寸非 16 对齐时按分配 buffer 大小 dump 出来的图像右侧就会出现无效数据即右侧绿边属于正常现象可通过调整配置文件中的图像 width 为 16 的整数倍对齐内存大小或按图像实际大小保存。本文的 sample 也支持通过 hbplayer 工具进行看图。首先在 hbplayer 中设置平台、IP 地址等相关参数以 6V 测试为例可在 6V 测试命令后增加-e 参数 -e 2 显示 ds 层第二层/app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/bin/vio_scenario_sample \ -v /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/Scenario_6V_cpe04_sen_cim04_isp0_pym04_sample/vpm_config.json \ -c /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/case_j6evm/6V_1xOVX8D_1xIMX623_RX0_4xISX031_RX4_SYNC/hb_j6dev.json -m 63 -l 1000 -s 6 -e 2执行命令后点击 hbplayer 左侧栏中的 connect 即可完成连接并在右侧界面看到实时 6V 图像当满足 -l 或 -t 参数指定的条件后sample 将自动退出运行也可通过 CtrlC 手动结束运行。其他测试场景连接 hbplayer 工具看图的方法和效果均类似不再赘述。