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流程图如下:
主干代码:
如果不做单独的sensor开关流,上面代码中的hb_cam_start和hb_cam_stop可不调用,hb_vio_start_pipeline和hb_vio_stop_pipeline已经对应包含了sensor开关流功能。
获取数据及释放数据的代码:
2. 编译¶
2.1. 编译环境¶
2.2. 编译说明¶
本sample编译需要VPS系统相关的头文件:
编译依赖的库有如下:
编译命令:
3. 运行¶
3.1. 支持平台¶
J6B Plus Evm
3.2. 硬件环境搭建¶
接口连接如下:
模组:联创模组OVX8D、IMX623,LONGHORN-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测试命令:
2V测试命令:
6V测试命令:
3.4.2. 运行命令行说明¶
vio_scenario_sample:应用程序名字。
下面的表格是具体参数的说明:
参数名 | 用法 | 是否必需 |
|---|
-v | 指定VIO的配置文件 | 是 |
-c | 指定camera的配置文件 | 是 |
-m | pipeline的掩码,bit0代表pipeline0,bit1代表pipeline1,以此类推 | 是 |
-l | 循环获取数据帧数 | 否 |
-s | 开启dump,代表需要保存到当前运行目录下的数据帧数 | 否 |
-t | 程序运行时间(单位毫秒,不建议与-l参数同时使用,使用其中一个即可) | 否 |
-e | 指定hbplayer显示的PYM ds层,不设置默认为-1,代表不使用hbplayer | 否 |
-r | 开启自恢复模式,0:不开启,1:开启,默认为0不开启 | 否 |
例如上面的1V测试命令:
-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 表示开启自恢复模式,在热拔插后能够进行自恢复,支持最长15s,15s后没插上就自动报错退出。
1.21.3.4.3. 运行结果说明¶
程序运行时通过下面的命令可以看到每个IP的帧率,如果不开dump,帧率符合预期,则程序正常运行。
上面的命令只能间隔一秒以上执行一次,过快执行帧率数据会变成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.000ms:
lpwm.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,或者可以直接使用环境变量选择帧率情形:
综上,6V 25fps场景的完整测试命令如下:
查看6V运行时的实时帧率为预期的25fps:
如果不需要25fps,那么执行如下命令,取消环境变量,再跑测试命令。
其他场景修改帧率的方法和过程均类似,不再赘述。
用户可在camera的配置文件中增加指定效果库文件,不配置或空时使用默认,例如指定 lib_CW_OX8DGB_AST1_065_L.so :
本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次数为2(roi_2)。
需要额外说明的是,由于收敛时间,各pipe的前几帧图像可能出现效果不佳情况,属于正常现象,具体帧数也与实际模组有关,用户关注和使用后续正常帧即可。
此外,由于实际分配buffer时内存需要16对齐,当用户配置文件中设置的图像尺寸非16对齐时,按分配buffer大小dump出来的图像右侧就会出现无效数据,即右侧绿边,属于正常现象,可通过调整配置文件中的图像width为16的整数倍对齐内存大小或按图像实际大小保存。
本文的sample也支持通过hbplayer工具进行看图。首先在hbplayer中设置平台、IP地址等相关参数:
以6V测试为例,可在6V测试命令后增加-e参数 -e 2 显示ds层第二层:
执行命令后,点击hbplayer左侧栏中的connect即可完成连接并在右侧界面看到实时6V图像:
当满足 -l 或 -t 参数指定的条件后,sample将自动退出运行,也可通过 Ctrl+C 手动结束运行。其他测试场景连接hbplayer工具看图的方法和效果均类似,不再赘述。