引言:
对于Android相机的 HAL层而言对上实现一套Framework的API接口,对下通过V4L2框架实现与kernel的交互。不同的平台会有不同的实现方案。主要是对Android HAL3的接口的实现。看看rockchip是怎么支持hal3的?
代码目录:
hardware/rockchip/camera/
hardware/rockchip/camera_engine_rkisp/
基本架构:
3A控制则是通过control loop接口与camera_engine_isp交互。
其他的一些组件或功能的实现也会调用到其他一些第三方库:
cameraBuffer相关,调用到Gralloc
jpeg编码,调用到Hwjpeg
基本组件:
Camera hal3 中的模块主要包括 AAL 与 PSL。
AAL:
主要负责与 framework 交互,camera_module 与 API 接口实例 camera3_device_ops 在此模块定义。该模块对此 API 加以封装,并将请求发往 PSL, 并等待接收 PSL 返回相应数据流与控制参数。
PSL:
是物理层的具体实现,基中 gcss、GraphConifg、MediaController 主要负责配置文件 xml 的解析,底层 pipeline 的配置, ControlUnit 主要负责与 camera_engine_isp 的交互,以实现 3a 的控制, 并中转一些请求以及 Metadata 的处理收集上报。ImgUnit、OutputFrameWork、postProcessPipeline 则主要负责获取数据帧并做相应处理以及上报。 V4l2device、V4l2Subdevice 则是负责与 v4l2 驱动交互,实现具体的 io 操作
tunning xml
tunning 文件是效果参数文件
文件的命名方式 :<sensor_name>_<module_name>_<lens_name>.xml, 并将该文件 push 到板子的 /vendor/etc/camera/rkisp1 目录下。最终 3a 库会从该目录中读取符合规则的 tuning 文件。
调试 Raw sensor 数据通路时,也可先 bypass isp。。只需要将 sensor 类型设置为 SOC 即可,此时, tuning 文件可暂不配置。
camera3_profiles.xml
camera3_profiles.xml 中包含了多个 Profiles 节点,Profiles 节点包含一个 camera 完整属性列表。 开发 板上接了几个 sensor,即需要配置几个 Profiles 节点。
通过如下命令获取到相关的信息:
$ adb shell dumpsys media.camera
编译后生成库:
1) Hal3 库: /vendor/lib/hw/camera.rk30board.so
2) librkisp : /vendor/lib/librkisp.so
3) 3a lib : /vendor/lib/rkisp//
4) 配置文件: /vendor/etc/camera/
上述配置文件是通过预编译将/etc/camera 中的文件 copy 到 android out 目录。 当修改源码编译后, 只需 push camera.rk30board.so 即可, 如修改配置文件, 也只需要 push 相应配置文件