camera_sensor原理、移植

一、camera介绍
camera组成:
FPC:柔性线路板,连接芯片和手机,起到电信号传输作用。
图像传感器:能感受到光学图像信息并转化成可用输出信号的传感器。
原理:由大量的感光二极管组成门阵列,二极管在受到光线的照射,可以将光的能量转换成电流输出,而输出的电流大小会根据不同的光强而不一样。
IR:红外滤波片,用来滤除红外光,调整光线摄入角度为直角,来达到更好的成像效果。
镜头lens:利用透镜的折射原理,景物光线、通过镜头,在聚焦平面上形成清晰的影像,通过感光材料 CMOS 或 CCD 感光器记录景物的影像。
camera工作原理
物体通过镜头(lens)聚集的光,通过 CMOS 或 CCD 集成电路,把光信号转换成电信号,再经过内部图像处理器(ISP)转换成数字图像信号输出到数字信号处理器(DSP)加工处理,转换成标准的 GRB、 YUV 等格式图像信号。通过 IO 接口传输到 CPU 中处理,通过 LCD 就可以看到图像了。

曝光三要素

  • 光圈就是指曝光瞬间开孔多大,当光圈开得越大,背景虚化效果越明显;光圈越小背景虚化效果则越不明显.
  • 快门速度就是指快门开启的时间,改变快门速度的同时也意味着改变了运动物体成像的方式(是否叠加)。快门速 度越慢,运动物体越模糊;速度越快,运动物体越清晰。
  • 感光度是指图像传感器对光线的敏感程度,ISO越大噪点越明显,画质也就越差;但ISO提高可以使用小光圈或提高快门速度。
    图像传感器 图像传感器是将光信号转换为电信号的装置。60年代末期,美国贝尔实脸室发现电荷通过半导体势阱发生转移的现象,提出了固态成像这一新概念和一维CCD(Charge-Coupled Device 电荷耦合器件)模型器件。这可以将光强转化成电信号。
    在像素阵列的表面覆盖一层彩色滤波阵列(Color Filter Array,CFA),彩色滤波阵列有多种,现在应用最广泛的是 Bayer格式滤波阵列,满足 GRBG规律,绿色像素数是红色或蓝色像素数的两倍,这是因为人眼对可见光光谱敏感度的峰值位于中波段,这正好对应着绿色光谱成分。
    camera_sensor原理、移植

上图就是一个采用 CFA模式的图像传感器,该模式图像数据只用 R、G、B 3个值中的1个值来表示 1个像素点。这样一来每个像素点只能捕获三基色 R,G,B中的一个,而缺失另外两个颜色值,这时候得到的是一幅马赛克图像。为了得到全彩色的图像,需要利用其周围像素点的色彩信息来估计出缺失的另外两种颜色,这种处理叫作色彩插值,也称作彩色插值或去马赛克。
由于 CFA模式所采用的图像颜色滤波阵列结构相对简单,并且所得到的图像数据仅仅是原始图像全部三原色信息的1 / 3的数据,因此成本较低。但是,上图中的CFA模式图像数据与BGR模式的图像据相比,缺少了 2 / 3的图像颜色信息,所以要对 CFA模式图像数据进行显示、压缩等后续处理,就需要事先对其进行插值运算,恢复CFA模式图像数据所缺少的2 / 3颜色信息,从而将 CFA模式图像数据重建为与 BGR模式图像相匹配的图像数据。比较常见的是双线性插值算法:该算法在对一个像素点的某颜色值进行插值运算时,会用该像素相邻像素点对应颜色值通过算数平均来估计。
自动聚焦
自动聚焦目的是获得清晰度更高得图像。常用的聚焦方法分两类,一类是传统的聚焦方法,一种是基于数字图像处理方式的图像聚焦方法。传统的方式中,自动聚焦通过红外线或者超生波测距的方式来实现。这种方式需要安装发射机和接收机,增加了摄像机的成本,而且超声波对于玻璃后面的被摄物体不能很好的自动聚焦。这一类聚焦方式在某些场合受到了限制。因此在日趋集成化、微型化、低成本的应用中,基于数字图像处理的自动聚焦方法更具有优势。
根据镜头成像分析,镜头的光学传递函数可以近似为高斯函数,它的作用等效为一个低通滤波器。离焦量越大,光学传递函数的截止频率越低。从频域上看,离焦量增大,对图像高频能量造成损失,使得图像的细节逐渐模糊。从空域上看,离焦量增大,点光源成像的光强分布函数越分散,可分辨的成像间距越大,图像相邻像素互相重叠,图像细节损失严重。因此图像清晰度评价函数时建立在图像边缘高频能量上的。
数字处理方法中,自动聚焦的关键在于构造图像的清晰度评价函数。己经提出的图像清晰度评价函数苞括灰度方差、梯度能量、嫡函数和一些频域函数法。图像清晰度评价函数必须具有良好的单峰性和尖锐性,而且要计算量适度,从而可以快速的实现精准对焦。
白平衡
要求在不同色温环境下,照白色的物体,屏幕中的图像应也是白色的。色温表示光谱成份,光的颜色。色温低表示长波光成分多。当色温改变时,光源中三基色(红、绿、蓝)的比例会发生变化,需要调节三基色的比例来达到彩色的平衡,这就是白平衡调节。
彩色深度(色彩位数)
反映对色彩的识别能力和成像的色彩表现能力,实际就是 A/D 转换器的量化精度,是指将信号分成多少个等级。常用色彩位数(bit)表示。彩色深度越高,获得的影像色彩就越艳丽动人。现在市场上的摄像头均已达到 24 位,有的甚至是 32位。

二、camera驱动移植

  • camera驱动工作流程打开 Camera Power LDO,让 Camera 有能量保证。
  • 打开 IIC,设置 PDN 引脚,使 Camera 退出 Standby 模式,按照 datasheet要求让 Reset 脚做一个复位动作。
  • 读一下 sensor ID,这样可以让你确认是否连接上你想要的 sensor。
  • 对 Sensor 进行初始化下载最基本的参数让 Sensor 工作起来,可能包括软复位。
  • 下载 preview 的参数,为预览动作准备。
  • 下载 Capture 的参数,为拍照动作准备。
  • 设置 PDN 引脚,使 Sensor 进入 Standby 模式,或者关掉 LDO 等动作,退出 Camera。
    camera移植
    高通平台下的camera相关代码分成两部分,一部分放在Kernel下,是驱动通用的。一部分放在Vendor下,把差异化代码脱离出来。
  1. Kernel:在 kernel 中,主要包括 dts 和 driver 部分这个文件就存放本项目camera的基本信息,比如三款摄像头的信息,前后摄、角度、使用的马达、存储校准数据的EEPROM等
    vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/sensors/configs/sdm660_camera.xml
    camera_sensor原理、移植
  2. 这个文件是一个总控文件,包含了所有相关的宏控内容。vendor/qcom/proprietary/common/config/device-vemdor.mk
    camera_sensor原理、移植
  3. 此路径下就存放了很多种camera,我们使用到的三款就可以在这里看到,然后按照上面选择的camera进行相应的修改。vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/sensors/sensor/libs
    camera_sensor原理、移植
  4. 同时修改Android.mk里面的LOCAL_MODULE。vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/sensors/sensor/libs/htc_ov16b10_truly_back1_i_lg/Android.mk
    camera_sensor原理、移植
  5. 此路径就是Kernel下的设备树文件,所有的设备就是挂载在这里,camera的设备配置在这里就可以看到。比如AVDD/DVDD的供电接口等。同时也是这里和驱动相匹配的Camera的名字compatible是可以在对应的xxx_driver.c文件里对应上的,同时也可以看到position的值也是对应的后摄。
    kernel/arch/arm64/boot/dts/qcom/sdm660-camera-sensor-mpt.dtsi
    camera_sensor原理、移植
    camera_sensor原理、移植
  6. 这里的compatible可以看到是和设备对应上的。同时在kernel也就只有这一个camera的xxx_driver.c。这就是提取出来的共同的那部分,而不用一个设备写一个xxx_driver.c。kernel/drivers/media/platform/msm/camera_v2/sensor/msm_sensor_driver.c
    camera_sensor原理、移植
    当设备和驱动匹配上时,会进入probe 函数,我就在这里打印一个log作为观察
    camera_sensor原理、移植
    三、camera测试
    完成vendor下修改后,需要编译一下重新刷一下vendor镜像1
  7. 执行:source zproject/envsetup.h
    版本选择与整编时一致,我选择的是0,0
    mmm:编译指定路径下的模块mmm ./vendor/qcom/proprietary/mm-camera
    mm:编译当前路径下模块
    …/mm-camera$ mm
  8. 编译成功时会在out/target/product/sdm660_64/vendor/lib目录下会生成.so动态库文件。如果想使我们修改的内容生效,需要导入到手机vendor/lib目录下。
    ***方法一:***首先我们要确认push权限打开,权限在kernel/fs/ext4/balloc.c文件中,将1改为0.
    camera_sensor原理、移植
    再编译Kernel,将新的boot.img刷进手机里。再adb工具里执行
    adb root
    adb remountadb
    push 文件路径 手机目录
    //adb remount是将system部分至于可写入模式,默认只读只适用于已root设备。
    camera_sensor原理、移植
    ***方法二:***先放到system目录下,移到vendor/lib目录下。
  9. 开启抓取camera log的prop项
    查看prop项是否修改成功
  10. 生成camera log
    查看camera log