FastRVC功能
1. 功能需求
- 开机阶段需要支持倒车功能;
- 输入为AHD鱼眼摄像头需要做矫正和后续数据计算;
- 需要支持轨迹和雷达显示功能;
1.1 功能实现方式评估
从结构方面考虑支持三种实现方式:
- 使用arm2倒车,输入输出和轨迹雷达都是现成的;
需要做两个处理:1. 鱼眼矫正;2. 采集数据做后续运算;目前这部分在系统阶段统计数据需要一个A53 100%的算力,arm2为arm9实现,算力差异较大(差不多是1/5的样子); - 使用一个A53核独立出来处理此部分
此功能暂时没有实现过,需要考虑核间资源共享和通信相关问题(SMP),非短期内可以解决的方案; - 采用当前fastavm的结构,轨迹雷达不支持,出图时间最早在7s左右,可以跟客户沟通是否满足其需要
1.2 决策实现
与客户沟通后,可以接受方案三的情况,但是要求在2周内完成,则需要处理的事情:
- 获取图像,AVM功能是获取4ch的mipi数据,则在此阶段可以获取到数据(如下两个点开始没有考虑,导致时间周期拉长):
- 需要check,获取到的数据是通过哪个path的?默认AVM是CSI2
- 需要确认,这里获取到的数据支持哪些格式,要考虑格式转换耗费的资源,最好是cam isp display都支持的格式
- 显示图像,目前支持fastdisplay功能
- fastdisplay仅支持一层surface的申请(即一层HW layer),需要添加为两层layer支持
- fastdisplay 中没有隐藏surface的接口,则需要退出倒车时,只能销毁掉surface使用
- 将获取的图像给到申请到的buffer中
- 实际需要对这里的数据进行处理后再送入到displaybuffer中,但是这里仅为演示,所以直接做memcpy即可;
- demo 处理过程中需要实现对格式的处理,需要注意的是,有些库是临时搞出来的(hard code),所以不支持格式config;
- 使用完成后的退出,销毁surface即可;
- 轨迹雷达的处理
- display 部分支持两个layer
- 资源文件添加
- kernel阶段文件系统还没有挂载,只能支持raw分区,则可以添加一个分区用于存放 轨迹 & 雷达 & 数据处理算法的bin ;
- 可以复用logo分区,将资源文件添加进去,在arm2阶段读取出来;
2. 问题记录
2.1 获取cam数据失败
在demo板验证完成后,给到客户测试无法获取到数据,查看原理图确认当前AVM支持获取的为CSI2的数据,而RVC摄像头连接为CSI0A的port,则无法获取;
这部分实现为了尽快满足客户需求,所以写的hard code,确认此问题后对此部分添加多个ch可配置功能(delay 2天)
2.2 格式转换
这部分在功能开发开始时就有考虑,但是各个模块各自实现好自己部分后没有联调,导致各自的格式不统一,经过双方check后确认所有模块均支持的格式为YUV422中YUYV;
- ISP获取数据格式支持:更新so + 驱动中配置YUYV,注意这部分仅支持YUV422;
- CAM获取数据支持YUV422 & RGB,当前逻辑为读取sensor的格式,直接获取,这里不需要上层配置;
- Display layer 支持格式较多,YV12\NV12\RGB\YUV422等等,然后与前边两个环节取交集后则只支持YUYV了;
此部分格式测试耗费1天时间;
2.3 编译问题
vendor/autochips/proprietary/hardware/cam_test/LibCamTest.cpp:197: error: undefined reference to ‘DisplaySurface::setZOrder(int)’
对应库的版本不对,so中没有实现setZOrder,需要更新
被依赖的中间文件生成在:
头文件生成位置在:out/target/product/project/obj/HEADER_LIBRARIES
shared_librarie生成位置在:out/target/product/project/obj/SHARED_LIBRARIES
bin文件生成位置在:out/target/product/project/obj/EXECUTABLES
将所需文件都添加后,最好使用mma编译,这样会将所依赖部分全部build一遍,避免不同步;
此部分编译不过修改耗费1天时间;
2.4 surface隐藏
退出倒车时,需要将申请到的surface 隐藏起来或者销毁掉,来保证完整功能;
此部分没有提供隐藏接口,则直接将申请的surface delete掉完事
2.5 格式转换与RVC互相影响
这里是一个bug,在kernel启动阶段将cam获取的img格式设置为YUYV之后,应用倒车(系统启动后的倒车功能),颜色显示不对,明显就是cam这里配置的问题,经check确认,应用倒车中图像获取走android标准接口,理论与这里不冲突,但是由于修改为kernel部分,然后hal层中并没有拿到kernel中的具体格式,这里只是拿到了一个YUV422,没有包含其中的具体排列,所以次用YUYV转换为YV12的过程出现了异常,导致显示不对;
2.6 UI与视频叠加
未完待续;
3. 总结
- 需求评估阶段需要完整梳理一遍功能过程,确保无遗漏
- 编译需要将更新内容添加完全
- 相关库,要替换到对应的位置;
- 相关头文件,也要替换到对应位置;
- build时需要mma,更新所有依赖文件;
- debug时间要预留出来,设计越合理,前期考虑足够完善则后期问题越少;