qcom Android camera调试纪要
- 1、平台适配
- 1.1、kernel端
- 1.2、vendor端
- 1.2.1、cameraService lib代码
- 注意:需要在vendor\qcom\proprietary\common\config\device-vendor.mk中添加需要将当前的camera service lib加入到系统的编译路径中。
- 1.2.2、camera Chromatix效果参数
- 注意:该chromatix效果参数需要在vendor\qcom\proprietary\common\config\device-vendor.mk 进行添加进入系统配置。
- 1.2.3、Sensor Config xml文件配置
- 1.2.3.1、imx350_suny.xml配置
- 该配置文件主要提供了系统使用的chromatix的模块名字。
- 1.2.3.2、sdm660_camera.xml配置
- 该文件配置路径在:qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\config\sdm660_camera.xml下,主要提供系统支持使用的chromatix,csi,eeprom sensorlib等详细的配置----非常重要的配置文件。
- 1.2.3.3、sensors_configs_Android.mk配置
- 1.2.4、camera马达的lib文件配置
- 1.2.5、闪光灯的配置
1、平台适配
1.1、kernel端
kernel主要做camera的io,power,mipi等dts配置即可,主要完成video,sensor等设备节点驱动的注册,关于camera硬件参数的配置,具体的camera型号驱动在vendor中进行实现。
1.2、vendor端
目前高通的camera的vendor中包括了camera的驱动,具体参数配置,驱动马达,eeprom,3a,isp等。
1.2.1、cameraService lib代码
路径:vendor\qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\sensor\libs\imx350
以imx350为例,cameraService lib代码存放在上述路径中,当我们执行mm后,该代码将会编译为lib共给上层camera的service使用,具体表现为Android.mk中LOCAL_MODULE := libmmcamera_imx350可知。
注意:需要在vendor\qcom\proprietary\common\config\device-vendor.mk中添加需要将当前的camera service lib加入到系统的编译路径中。
1.2.2、camera Chromatix效果参数
chromatix为camera的3a,isp等出图的配置效果文件,它将会编译为多等lib提供给上层进行isp,3a等参数的调整。
vendor\qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\chromatix\0310\chromatix_imx350_sunny\Android.mk中配置可知,
LOCAL_MODULE := libchromatix_imx350_sunny_default_preview_3a
LOCAL_MODULE := libchromatix_imx350_sunny_default_video_3a
LOCAL_MODULE := libchromatix_imx350_sunny_hfr_120_3a
LOCAL_MODULE := libchromatix_imx350_sunny_hfr_60_3a
LOCAL_MODULE := libchromatix_imx350_sunny_hfr_90_3a
LOCAL_MODULE := libchromatix_imx350_sunny_zsl_preview_3a
LOCAL_MODULE := libchromatix_imx350_sunny_zsl_video_3a
注意:该chromatix效果参数需要在vendor\qcom\proprietary\common\config\device-vendor.mk 进行添加进入系统配置。
在chromatix中,可能存在多个分支,具体系统使用那一份分支将由CHROMATIX_VERSION来决定,定义在
vendor\qcom\proprietary\mm-camera\Android.mk
ifeq ( ( B U I L D S E R V E R ) , t r u e ) C H R O M A T I X V E R S I O N : = 0208 e l s e i f e q ( (BUILD_SERVER), true) CHROMATIX_VERSION := 0208 else ifeq ( (BUILDSERVER),true)CHROMATIXVERSION:=0208elseifeq((BUILD_MM_CAMERA2), true)
ifeq ( ( O E M C H R O M A T I X 0 308 ) , 1 ) C H R O M A T I X V E R S I O N : = 0308 E e l s e i f e q ( (OEM_CHROMATIX_0308), 1) CHROMATIX_VERSION := 0308E else ifeq ( (OEMCHROMATIX0308),1)CHROMATIXVERSION:=0308Eelseifeq((call is-board-platform-in-list,sdm660 msm8998),true)
CHROMATIX_VERSION := 0310
else
CHROMATIX_VERSION := 0309
endif
endififeq ($(OEM_CHROMATIX_0310), 1)
OEM_CHROMATIX:=true
endififeq ($(OEM_CHROMATIX), true)
LOCAL_CHROMATIX_PATH := ( L O C A L P A T H ) / . . / m m − c a m e r a − e x t / m m − c a m e r a s d k / s e n s o r / i n c l u d e s / (LOCAL_PATH)/../mm-camera-ext/mm-camerasdk/sensor/includes/ (LOCALPATH)/../mm−camera−ext/mm−camerasdk/sensor/includes/(CHROMATIX_VERSION)
LOCAL_EXTEN_ISP_INCLUDES := $(LOCAL_PATH)/…/mm-camera-ext/mm-camera2/media-controller/modules/isp2/
LOCAL_EXTEN_PPROC_INCLUDES := $(LOCAL_PATH)/…/mm-camera-ext/mm-camera2/media-controller/modules/pproc-new/cpp/
LOCAL_EXTEN_CHROMATIX_FILE_PATH := ( L O C A L P A T H ) / . . / m m − c a m e r a − e x t / m m − c a m e r a 2 / m e d i a − c o n t r o l l e r / m o d u l e s / s e n s o r s / c h r o m a t i x / (LOCAL_PATH)/../mm-camera-ext/mm-camera2/media-controller/modules/sensors/chromatix/ (LOCALPATH)/../mm−camera−ext/mm−camera2/media−controller/modules/sensors/chromatix/(CHROMATIX_VERSION)
else
LOCAL_CHROMATIX_PATH := ( L O C A L P A T H ) / . . / m m − c a m e r a s d k / s e n s o r / i n c l u d e s / (LOCAL_PATH)/../mm-camerasdk/sensor/includes/ (LOCALPATH)/../mm−camerasdk/sensor/includes/(CHROMATIX_VERSION)
LOCAL_EXTEN_CHROMATIX_FILE_PATH := ( L O C A L P A T H ) / m m − c a m e r a 2 / m e d i a − c o n t r o l l e r / m o d u l e s / s e n s o r s / c h r o m a t i x / (LOCAL_PATH)/mm-camera2/media-controller/modules/sensors/chromatix/ (LOCALPATH)/mm−camera2/media−controller/modules/sensors/chromatix/(CHROMATIX_VERSION)
endif
1.2.3、Sensor Config xml文件配置
qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\config\Android.mk
qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\config\imx350_suny.xml
qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\config\sdm660_camera.xml
1.2.3.1、imx350_suny.xml配置
该配置文件主要提供了系统使用的chromatix的模块名字。
imx350_sunny_postproc imx350_sunny_common imx350_sunny_snapshot imx350_sunny_snapshot imx350_sunny_default_video imx350_sunny_cpp_preview imx350_sunny_cpp_snapshot imx350_sunny_cpp_video imx350_sunny_cpp_liveshot imx350_sunny_zsl_preview_3a imx350_sunny_zsl_video_3a imx350_sunny_common_oz imx350_sunny_oz_preview imx350_sunny_oz_snapshot imx350_sunny_oz_preview imx350_sunny_cpp_oz_preview imx350_sunny_cpp_oz_snapshot imx350_sunny_cpp_oz_preview imx350_sunny_cpp_liveshot imx350_sunny_oz_preview_3a imx350_sunny_oz_preview_3a imx350_sunny_common_bining imx350_sunny_preview imx350_sunny_snapshot imx350_sunny_default_video imx350_sunny_cpp_preview imx350_sunny_cpp_snapshot imx350_sunny_cpp_video imx350_sunny_cpp_liveshot imx350_sunny_default_preview_3a imx350_sunny_default_video_3a imx350_sunny_common_bining imx350_sunny_preview_bokeh imx350_sunny_preview_bokeh imx350_sunny_default_video imx350_sunny_cpp_preview imx350_sunny_cpp_snapshot imx350_sunny_cpp_video imx350_sunny_cpp_liveshot imx350_sunny_default_preview_3a imx350_sunny_default_video_3a imx350_sunny_common imx350_sunny_hfr_90 imx350_sunny_hfr_90 imx350_sunny_hfr_90 imx350_sunny_cpp_hfr_90 imx350_sunny_cpp_hfr_90 imx350_sunny_cpp_hfr_90 imx350_sunny_cpp_liveshot imx350_sunny_hfr_90_3a imx350_sunny_hfr_90_3a imx350_sunny_common imx350_sunny_hfr_120 imx350_sunny_hfr_120 imx350_sunny_hfr_120 imx350_sunny_cpp_hfr_120 imx350_sunny_cpp_hfr_120 imx350_sunny_cpp_hfr_120 imx350_sunny_cpp_liveshot imx350_sunny_hfr_120_3a imx350_sunny_hfr_120_3a
1.2.3.2、sdm660_camera.xml配置
该文件配置路径在:qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\config\sdm660_camera.xml下,主要提供系统支持使用的chromatix,csi,eeprom sensorlib等详细的配置----非常重要的配置文件。
0 // camera id =0,注意和 dts 中 cell-index 一致 imx362 // sensor name , 这个名字用来找到对应的 sensor lib 库,所以不能错了 ak7374 // lens name ,用来找到对应的马达驱动 sony_imx362 // eeprom name, 用来找到对应的eeprom驱动 imx362_chromatix // chromatix name,用来找到对应的效果文件 pmic // flashlight name, 用来找到 mm-camera2\media-controller\modules\sensors\flash\libs 下面对应的库 1 BACK // 后摄 90 // 旋转90度,注意和 dts 中配置的一样 0 // CS 0 0x1F // 4 lane 和 1 clk 同时使能 0x4320 0 // 马达相关的参数,具体看模组 sepc 3.94 1.9 4.64 70.4 55.7 0.1 1 // camera id =1 imx350 dw9800 sony_imx350 imx350_chromatix 1 BACK_AUX // 后二摄 90 1 // CS 1 0x1F 0x4320 0 5.3 2.6 5.0 51.4 40.0 0.3 2 // camera id =2 s5k4h7yx holitech_s5k4h7yx s5k4h7yx_chromatix 1 FRONT // 前摄 270 // 旋转270度 2 // CS2 0x1F 0x4320 0 // 马达相关参数 2.47 2.0 1.9 63.84 47.88 0.1
1.2.3.3、sensors_configs_Android.mk配置
主要是platform级别的配置,系统级别的camer xml配置参数。
1.2.4、camera马达的lib文件配置
在前面的sdm660_camera.xml配置文档中,就进行了指定马达的name的型号,如上:
<ActuatorName>ak7374</ActuatorName>
和<ActuatorName>dw9800</ActuatorName>
这两种马达。
马达的lib路径为:vendor\qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\actuator\libs
需要将马达的配置页导入到系统的编译配置中。
vendor\qcom\proprietary\common\config\device-vendor.mk
加入:
MM_CAMERA += libactuator_dw9800`
MM_CAMERA += libactuator_ak7374
1.2.5、闪光灯的配置
在前面sdm660_camera.xml
中,可以看出flashlight 使用的是默认的 <FlashName>pmic</FlashName>
驱动。
驱动代码路径为:vendor\qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\flash\libs\pmic
同时也需要将其加入到系统的编译路径下:
vendor\qcom\proprietary\common\config\device-vendor.mk加入:
MM_CAMERA += libmmcamera_sony_imx350_eeprom