需求规格说明书 Camera Hal3 User Manual 2.0

camera_hal3_user_manual_2.0

User Manual:

Open the PDF directly: View PDF PDF.
Page Count: 16

Download需求规格说明书 Camera Hal3 User Manual 2.0
Open PDF In BrowserView PDF
密级状态:绝密(

)

秘密(

)

内部(

)

公开(√ )

Camera_Hal3_User_Manual
(ISP 部)
文件状态:

当前版本:

V1.0

[√] 正在修改

作

付祥

[ ] 正式发布

完成日期:
审

者:

2018-11-12

核:

完成日期:

福州瑞芯微电子有限公司
Fuzhou Rockchips Semiconductor Co . , Ltd
(版本所有,翻版必究)

版 本 历 史
版本号

作者

修改日期

V1.0

付祥

2018-11-12

V1.0.1

付祥

2018-11-13

V2.0

付祥

2018-11-16

修改说明
发布初版

增加初版 hal3 框架
说明

审核

备注

目录

目录 ........................................................................................................................................................................................... 3
ROCKCHIP CAMERAHAL3 框架与新增 CAMERA 配置及调试说明 ........................................................................... 5
1.

2.

CAMERA HAL3 框架 .................................................................................................................................................... 5
1.1

CAMERA HAL3 基本框架: ...................................................................................................................................... 5

1.2

代码目录简要说明 ................................................................................................................................................... 6

1.3

CAMERA HAL3 基本组件: ...................................................................................................................................... 6

1.4

CAMERA HAL3 与 FRAME WORK 交互时序: ........................................................................................................... 7

1.5

CAMERA HAL3 实现详细时序: .............................................................................................................................. 8

1.6

GRAPH 与 MEDIACTL PIPELINE: ................................................................................................................................. 8

1.7

CAMERA BUFFER 与 METADATA 管理: .................................................................................................................. 8

SENSOR 适配简要步骤说明: ...................................................................................................................................... 9
2.1

3.

4.

5.

生成 GRAPH_SETTINGS_.XML......................................................................................................... 9

2.1.1

脚本使用: ...................................................................................................................................................... 9

2.1.2

脚本参数说明如下: ...................................................................................................................................... 9

2.2

获取 TUNNING XML ................................................................................................................................................. 10

2.3

配置 CAMERA3_PROFILES.XML ............................................................................................................................... 10

2.3.1

camera3_profiles.xml 说明: ............................................................................................................................. 10

2.3.2

客户所需修改: ............................................................................................................................................ 11

2.3.3

xml 运行生效: .................................................................................................................................................. 13

编译运行调试: ............................................................................................................................................................. 13
3.1

编译: .................................................................................................................................................................... 13

3.2

生成库:................................................................................................................................................................. 14

3.3

运行: .................................................................................................................................................................... 14

DUMP 说明 .................................................................................................................................................................... 15
4.1

属性说明:............................................................................................................................................................. 15

4.2

未生成 DUMP 文件问题: ...................................................................................................................................... 16

版本说明: ..................................................................................................................................................................... 16

5.1

HAL3 版本获取: ................................................................................................................................................... 16

Rockchip CameraHal3 框架与新增 camera 配置及调试说明
Hal3 基于新框架的 rkisp1 及 cif 驱动,新框架驱动介绍可参考文档《Rockchip Linux Camera 开发指南.pdf》。
(Hal3 代码目录位于 <工程根目录>/hardware/rockchip/camera,以下使用来代替)

文档适用平台
芯片平台

驱动

操作系统

支持情况

RV3326

Linux(Kernel-4.4):rkisp1 driver

Android9.0

Y

1. Camera Hal3 框架
1.1

Camera Hal3 基本框架:

Camera hal3 在 android 框架中所处的位置如上图, 对上,主要实现 Framework 一整套 API 接口,响应其
控制命令,返回数据与控制参数结果。 对下, 主要是通 V4l2 框架实现与 kernel 的交互。3a 控制则是通 control
loop 接口与 camera_engine_isp 交互。 另外,其中一些组件或功能的实现也会调用到其他一些第三方库, 如
cameraBuffer 相关,会调用到 Galloc 相关库, jpeg 编码则会调用到 Hwjpeg 相关库。

驱动框架文档参考: 《RKISP_Driver_User_Manual_v1.0》
Camera_engine_isp 参考: 《Camera_Engine_Rkisp_User_Manual》

1.2

代码目录简要说明

hal3_camera :
├── AAL

Android Abstraction Layer,负责与 framework 交互

├── common

公用文件,如线程,消息处理,Log 打印等实现

│ ├── gcss

xml 解析相关

│ ├── imageProcess

图像处理相关,如 scale

│ ├── jpeg

jpeg 编码相关

│ ├── mediacontroller

media pipeline 相关

│ ├── platformdata

hal3 能力支持的属性,主要是管理从 xml 获取到的属性

│ ├── utils

目前只有一个 Error.h,定义了一些返回值

│ └── v4l2dev

封装了一些与 v4l2 驱动交互的具体 io

├── etc

配置文件目录

├── include

Control loop 的头文件,buffer_manager 相关头文件

├── lib

3a engine 相关库

├── psl

Physical Layer,物理实现层,所有的实现逻辑基本都在这里

│ └── rkisp1

目前只有 Rkisp1 一套实现方案

│

├── tasks

基本只用到了里面的几个 Notify 的接口类和 JpegEncodeTask

│

└── workers

数据的获取处理都在这里

└── tools
1.3

包含了一个自动生成 graph setting xml 的 Python 脚本

Camera Hal3 基本组件:

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 操作。

1.4

Camera hal3 与 Frame work 交互时序:

关于 framework 与 hal 交互的 API 详细说明文档可以参考:
/hardware/libhardware/include/hardware/camera3.h

1.5

Camera Hal3 实现详细时序:

此图主要描绘了 configure_streams 流程,process_capture_request 流程在 Hal3 中的具体实现逻辑,时序图
以该两个 API 接口为起始点,直到 hal3 下发 v4l2 相关 ioctl 并返回相关数据结果为止。该流程图基本涵盖了
Hal3 中的主要模块
上图中

符号代表循环执行,也即表示此处有线程正在等待事件的到来。 Hal 层的运行也正是由这些

事件驱动(即上面的红色键头)。

1.6

Graph 与 mediactl pipeline:

TODO
1.7

Camera buffer 与 MetaData 管理:

TODO

2. Sensor 适配简要步骤说明:
在 sensor 驱动已经调通的基础上,HAL 中添加新 sensor 支持需要配置如下文件:(Hal3 代码目录位于 <工程
根目录>/hardware/rockchip/camera,以下使用来代替)
1) 生成与 sensor 相匹配的 graph setting 文件:graph_settings_.xml
2) 获取 tuning 文件, SOC sensor 可略过此步骤
3) 配置 camera3_profiles.xml
4) 将配置文件 push 到板子, 并重新启动 camera 进程
以下章节是各个步骤详细说明。

2.1

生成 graph_settings_.xml

graph_settings_.xml 主要 hal3 用来是配置 pipeline 各级输出格式的。可以使
用

/tools/gen_sensor_graph_setting.py 脚本自动生成。

2.1.1 脚本使用:
RAW

sensor 以 ov5695 为例:(SOC sensor 配置方法一样,sensor_fmt 不同而已)

$ ./gen_sensor_graph_setting.py --name=ov5695 --sensor_fmt=BG10 --width=2592 --height=1944 -binner_width=1296 --binner_height=972
执行该脚本后,会生成 graph_setting_ov5695.xml 文件,需要将之拷贝至/etc/camera 目录
$ cp graph_setting_ov5695.xml /etc/camera/
SOC

sensor 以 gc0132 为例:

$ ./gen_sensor_graph_setting.py --name=gc0132 --sensor_fmt=YUYV --width=640 --height=480
如果客户暂不清楚各项参数如何配置, 可先只配置 name 、 width 、 height, 即如下:
$ ./gen_sensor_graph_setting.py --name=ov5695 width=2592 --height=1944

2.1.2 脚本参数说明如下:
--name: sensor 名称,一般与 sensor 驱动文件名相同,具体可用
$ adb shell cat /sys/class/video4linux/v4l-subdev*/name 列出所有的 subdev name,然后找到对应的 sensor
subdev 的 name。

-- sensor_fmt: sensor_fmt 可查询 sensor 驱动,或者使用$ adb shell media-ctl -p (需先执行 adb root,后续该
命令不做说明)列出 media 设备的 pipeline 信息,然后找到对应 sensor 的 entity 部分,entity 信息里有包
含 sensor_fmt 信息。(该项设置错误将会导致预览颜色显示不对)

--bayer_order: 与 senor_fmt 中的的信息相对应。目前暂时未用到,可不配。
--width: sensor 输出 full width, 参见下图
--height: sensor 输出 full height ,参见下图
-- binner_width: sensor 输出 binner width, 此项需要驱动支持输出 binner 尺寸,如不支持,可不配
-- binner_height: sensor 输出 binner height,此项需要驱动支持输出 binner 尺寸,如不支持,可不配

上图是从 $ adb shell media-ctl -p 列出的信息中截取的 sensor entity 信息
其中 fmt 为 fmt:SBGGR10 , 则设置项对应为 --sensor_fmt=BG10,对应关系可以参见 videodev2.h(下图
截取该文件中一小段)

2.2

获取 tunning xml

tunning 文件是效果参数文件,只有 Raw sensor 才需该此文件。该文件如何获取可以联系 FAE。
一般以如下方式命名 senso_name+module_name+lens_name,然后将该文件放入
/etc/camera/rkisp/ 目录下,并参照下一章节 iqTuningFile 配置,配置该文件路径即可。

另外,调试 Raw sensor 数据通路时,也可先 bypass isp。只需要将 sensor 类型设置为 SOC
即可(参见 3.2 节中 sensor 类型的设置。), 此时, tuning 文件可暂不配置。
2.3

配置 camera3_profiles.xml

2.3.1 camera3_profiles.xml 说明:
在/etc/camera 目录下有多个 camera3_profiles_.xml, 最终会有一个文件 push
到 /vendor/etc/camera/camera3_profiles.xml. 选择一个适用的 camera3_profiles_.xml 文件,
参照前面 sensor 的配置添加新 sensor。
camera3_profiles.xml 中包含了多个 Profiles 节点,Profiles 节点包含一个 camera 完整属性列表。 开发

板上接了几个 sensor,即需要配置几个 Profiles 节点。
Profiles 节点下又包含了如下五个子节点。



















 节点包含的信息主要是 camera 的能力支持,该字段的信息上层将通过 camera_module
的 API:get_camera_info() 获取到。Camera 运行时也可以通过如下命令获取到相关的信息。

$ adb shell dumpsys media.camera
该节点中详细字段的定义可以参见 android 开发者网站:(CTS 中的一些问题需要详细查看该网站中字段的
定义)

https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics
其他的几个子节点 主要是平台实现所需要的一些信息, 这些对上层是透明的。

2.3.2 客户所需修改:
如下属性需要客户修改以适应不同 sensor:




cameraId="0" // cameraId 后置为 0, 前置为 1, 只有一个 camera 时, 为 0




name="ov5695" // sensor 的名字,参见第一步所述方法获取
control.aeAvailableTargetFpsRanges // 该设置项有多个限制需要注意
1) 录像必需要有一组恒定帧率, 假如帧率为 x, 那就要包含(x,x)
2) 录像帧率必需至少要一组大于 24 帧
3) 第一组的 Min <= 15. 所以第一组一般为 (15,x)
如不确定,先设置为 control.aeAvailableTargetFpsRanges value="15,30,30,30"



scaler.availableStreamConfigurations // hal 层支持的分辨率列表, 需要按照 sensor 的最大输出
尺寸依次降序排列。 Sensor 尺寸下面列出的都是一些通用尺寸,如 1080P, 720P, VGA 等。
如不确定,可从前面前面例子中 copy 一组, 然后修改最大分辨率



scaler.availableMinFrameDurations // 各分辨率下最小时延,需要按照 sensor 的最大输出尺寸依
次降序排列。
如不确定,可先将各个分辨率的的最小延时设置为 33333333



scaler.availableStallDurations // 各分辨率下拍照最小时延,需要按照 sensor 的最大输出尺寸依
次降序排列。
如不确定, 请参照 scaler.availableMinFrameDurations



sensor.info

// sensor 相关属性的配置





graphSettingsFile
// 配置文件的名称,本目录下 graph_settings_xx.xml
iqTuningFile
//tuning file 的文件路径,tuning file 存放在 rkisp 目录下, SOC sensor 无需
配置




sensorType 修改成对应 sensor 的类型,(RAW or SOC)




修改 type="pixel_array" 中的 element name, // 该 name 为 sensor 在 driver 中的设备名称,可
以通过如下命令获取 adb shell cat /sys/class/video4linux/v4l-subdev*/name 查看

2.3.3 xml 运行生效:
参照下一章节

3. 编译运行调试:
3.1

编译:

1) 确 认 /device/rockchip/common/BoardConfig.mk 文 件 中 ,

是 否 有 定 义 宏

BOARD_DEFAULT_CAMERA_HAL_VERSION , 如 无 定 义 , 请 在 文 件 末 添 加 如 下 :
BOARD_DEFAULT_CAMERA_HAL_VERSION := 3.3
( Sdk 发部应该带有 hal1 和 hal3 两套源码,该两套源码编译目标是相同的,所以同时编译会产生冲突,

因 此 在 编 译 时 加 一 个 宏 来 判 断 编 译 哪 一 套 hal 源 码 , 如 下 :

ifeq (1,$(strip $(shell expr

$(BOARD_DEFAULT_CAMERA_HAL_VERSION) \>= 3.0))) ,只有当该宏 >=3.0 时才会编译 hal3. )
2) 在 目录
$ source build/envsetup.sh && lunch
3) 进入 hal3 源码目录
$ mma –j8

3.2

生成库:

1) Hal3 库: /vendor/lib<64>/hw/camera.rk30board.so
2) librkisp : /vendor/lib<64>/librkisp.so
3) 3a lib : /vendor/lib<64>/rkisp//
4) 配置文件: /vendor/etc/camera/
上述 librkisp、3a lib、配置文件都是通过预编译将/lib 、 /etc/camera 中的文件 copy 到 android
out 目录。 每一项都可以单独更新。 当修改源码编译后, 只需 push camera.rk30board.so 即可, 如修改配置文
件, 也只需要 push 相应配置文件。

3.3

运行:

1.将需要更新的库或者 xm 配置文件 push 到板子相应的目录。
$ adb root && adb remount
$ adb push /etc/camera /vendor/etc/ (android version >= 8.0)
$ adb push /etc/camera /system/etc/ (android version < 8.0)
2.重新启动 camera 服务进程
$ adb shell pkill camera && adb shell pkilll provider
3.通过如下命令查看 camera 是否加载成功。
$ adb shell dumpsys media.camera
4.如果没有打印出 camera 相关信息(camera 正常信息有好几百行),则加载失败。
此时:
5.再次确认配置文件是否有 Push 到板子(普遍是这个问题,请再三确认):
$ adb shell
$ cat /vendor/camera/camera3_profiles.xml //查看该文件是否是修改过后的文件,
$ adb logcat|grep "E RkCamera" 查看是否是致命错误,定位分析。
6. 如果前三步都没有问题,底层驱动正常,可用 v4l2-ctl 抓到数据,此时 camera 应该可以打开了。

Camera 如果打不开, 可以打开相关 camera log 的开关来定位问题。
$ adb shell setprop persist.vendor.camera.hal.debug 5

4. Dump 说明
为了方便调试, hal3 增加了几个属性值,可以将预览,录像,拍照等数据流直接 dump 到文件。 以下是
详细说明:

4.1

属性说明:

persist.vendor.camera.dump: 表示相关数据的 dump 开关, 属性值对应不同数据流
例:
adb shell setprop persist.vendor.camera.dump 1 #dump preview
adb shell setprop persist.vendor.camera.dump 2 # dump video
adb shell setprop persist.vendor.camera.dump 4 # dump zsl
adb shell setprop persist.vendor.camera.dump 8 # dump jpeg
adb shell setprop persist.vendor.camera.dump 16 # dump raw
// 上述 raw 并非从 sensor 直接出来的数据 ,而是从 isp 拿到的数据,还未在 Hal 层处理过
adb shell setprop persist.vendor.camera.dump 11 # dump preview + video + jpeg
persist.vendor.camera.dump.skip 属性表示跳过前面 n 帧
例: $ adb shell setprop persist.vendor.camera.dump.skip 10
表示前面 10 帧不 dump

persist.vendor.camera.dump.interval 属性是表示 dump 帧的间隔
例: $ adb shell setprop persist.vendor.camera.dump.interval 0
表示隔 10 帧 dump 一帧

persist.vendor.camera.dump.count 属性表示 dump 帧的总帧数
例: $ adb shell setprop persist.vendor.camera.dump.count 100
表示总共只 dump 100 帧

persist.vendor.camera.dump.path 属性表示 dump 帧的路径
例: $ adb shell setprop persist.vendor.camera.dump.path /data/dump/
表示 dump 的路径为 /data/dump/

(最后的”/” 不能省)

以下是一个完整例子,表示 dump 预览帧, 前面 10 帧不 dump, 每隔 10 帧 dump 一次,总共 dump 100
帧,路径为/data/dump/
adb shell setprop persist.vendor.camera.dump 1
adb shell setprop persist.vendor.camera.dump.skip 10
adb shell setprop persist.vendor.camera.dump.interval 10
adb shell setprop persist.vendor.camera.dump.count 100
adb shell setprop persist.vendor.camera.dump.path /data/dump/

4.2

未生成 dump 文件问题:

Dump 属性设置完成,打开相机,预览后, 板子 /data/dump/目录下应该会有如下 dump 文件生成。

如果未生成 dump 文件,请参照前面调试说明章节,打开 log 开关。并查看 log 是否有以下错误
$ adb logcat |grep "open file failed"

该错误是由于 dump 路径无权限访问,或者不存在导致的。可以尝试以下步骤解决。
确认 dump 路径是否存在, 不存在请更改目录,或创建目录
目录存在但依然无权限访问, 可以使用如下命令暂时关闭 selinux
$ adb root && adb shell setenforce 0

5. 版本说明:
5.1

Hal3 版本获取:

1. 通过读取属性值获取
$ adb shell getprop |grep cam.hal3.ver
2 也可以通过查看 logcat 获取
$ adb logcat |grep "Hal3 Release version"



Source Exif Data:
File Type                       : PDF
File Type Extension             : pdf
MIME Type                       : application/pdf
PDF Version                     : 1.5
Linearized                      : No
Page Count                      : 16
Language                        : zh-CN
Tagged PDF                      : Yes
Title                           : 需求规格说明书
Author                          : xiang fu
Creator                         : Microsoft® Word 2013
Create Date                     : 2018:11:16 16:44:49+08:00
Modify Date                     : 2018:11:16 16:44:49+08:00
Producer                        : Microsoft® Word 2013
EXIF Metadata provided by EXIF.tools

Navigation menu