[Camera Drv]系统是如何为Sensor匹配Lens Driver

来源:互联网 发布:安卓内核优化seeder 编辑:程序博客网 时间:2024/06/07 13:40


系统中是如何为某一个Sensor匹配Lens Driver的,匹配的规则是怎样的

ProjectConfig.mk 中的lens配置项并不能指定某个sensor使用哪个Lens driver,Lens driver的匹配过程是在打开相机的过程中执行的,通过Sensor ID按一定规则搜索Lens driver 数组lenslist[]来获取Lens driver。

 

Lens driver 数组lensList[] 是一个结构体数组,在文件alps\mediatek\custom\$platform$\hal\lens\src\lenslist.cpp 或alps\mediatek\custom\common\hal\lens\src\lenslist.cpp中,这个结构体为

SensorId:配置成对应的sensor的id值,配置成DUMMY_SENSOR_ID,表示这个lens driver可以匹配给任何sensor

LensId:Lens driver的唯一标识

LensDrvName:是实现AF 功能的驱动对应的设备驱动节点名,如对于fm50af,实现AF功能的是模块FM50AF.c ,这个driver会生成一个设备驱动节点 /dev/FM50AF,而对于sensordrive,实现AF功能的模块kd_sensorlist.c,这个driver会生成一个设备驱动节点 /dev/kd_camera_hw。

getlensdefault:为指向AF tuning参数文件中的一个函数指针

 

Lenslist[] 默认配置如下:

 

搜索数组Lenslist[]的规则如下

搜索结果为m_u4CurrLensIdx,初始值为0,即默认指向第一个元素

第一遍搜索:m_u4CurrLensIdx指向LensId为 DUMMY_LENS_ID、SENSOR_DRIVE_LENS_ID或FM50AF_LENS_ID 的元素,结果m_u4CurrLensIdx指向数组中符合条件的最后一个元素。

第二遍搜索:看数组中是否有SensorId 和当前的要找Lens driver的sensor的ID相等的元素,如果有结果为符合条件的第一个元素,没有的话则结果为第一遍搜索到的结果。

 

MT6577中代码如下:

 

MT6589 代码如下

 

MT6582 代码如下

 

Log 分析:

当AF不动时,需要核实一下Lens driver是否匹配成功,可以查看android log,搜索关键字 LensMCU, 找到类似下面的log。

10-01 00:26:29.419   118   118 D LensMCU : LensMCUlensSearch() - E

10-01 00:26:29.419   118   118 D LensMCU : LensMCU[CurrSensorDev]0x0000

10-01 00:26:29.419   118   118 D LensMCU : LensMCU[LensInitTable-0][SensorId]0xffff,[LensId]0xffff

10-01 00:26:29.419   118   118 D LensMCU : LensMCU[LensInitTable-1][SensorId]0x4800,[LensId]0x0002

10-01 00:26:29.419   118   118 D LensMCU : LensMCU[LensInitTable-2][SensorId]0x0000,[LensId]0x0000

10-01 00:26:29.419   118   118 D LensMCU : LensMCU[LensInitTable-3][SensorId]0x0000,[LensId]0x0000

10-01 00:26:29.419   118   118 D LensMCU : LensMCU[CurrLensIdx]1

10-01 00:26:29.419   118   118 D LensDrv : LensDrv()

10-01 00:26:29.419   118   118 D LensDrv : init() [m_userCnt]0

10-01 00:26:29.419   118   118 D LensDrv :

10-01 00:26:29.419   118   118 D LensDrv : [Lens Driver]/dev/MT9P017AF

 

从上面log中可以看出,当前为sensor匹配了 MT9P017AF 这个Lens Driver,如果MT9P017AF不是想要的Lens Driver,那么就需要检查

配置文件projectConfig.mk 和 LensList.cpp了

 

 

注意以下几点:

1:lenslist.cpp 文件 Lenslist[] 的配置, 其中 Dummy lens 需要放在数组最前面,不能移动位置

2:MT6589平台上如果想要为Sub Sensor实现AF功能的话,需要修改文件mcu_drv.cpp,把代码行 if (a_u4CurrSensorDev == SENSOR_DEV_MAIN) 改成 if (a_u4CurrSensorDev == SENSOR_DEV_MAIN || a_u4CurrSensorDev == SENSOR_DEV_SUB)

3:上面涉及到的文件,可能会在不同层次的目录下存在,其中目录优先级为:project folder > platform folder > common folder

0 0