标准光源是指模拟各种环境光线下的人造光源,让生产工厂或实验室非现场也能获得与这些特定环境下的光源基本一致的照明效果。标准光源通常安装在标准光源箱内,主要用于检测物品的颜色偏差。
2. 真实光源(场景)
1. 软件工具
在调试的时候Chromatix tools 的PC版或是Mobile版本是必备的, PC版本功能很强大,可以调试的很细节,但是比较繁琐,对调试设备的要求高;Mobile 版本一般适合初步调试,只是截取了PC版功能调试的一部分,当然最大的好处是所见即所得;建议在调试的时候,两个工具能结合使用,发挥各自所长。
不管使用PC 还是Mobile工具,最终都要通过Chromatix tools PC端软件生成头文件,而此工具目前只有windows版本,为了避免不同平台之间切换,浪费时间,一般最好在windows下编译,然后push到手机中。此编译工具网上很多,找一个最适合自己的使用。
2. 硬件工具
3. 辅助工具
图三 调试测试互动流程图
3. 效果优化以及测试
四.代码篇
1. 代码备份
Camera 在优化的过程中,往往要优化十多个阶段,每个阶段的代码一定要有所备份,强烈建议用GIT 备份,追踪能力强,还原简单,若每个阶段的修改都加了备注,更加会一目了然;而SVN追踪太差,还原能力太弱,在这种频繁更新的代码上可操作性会大打折扣;也有的同学习惯用复制复制复制,到最后自己都不知所以。
2.命名规则
a.新添加模组
大体上,新添加模组命名规则以IC名称+模组厂+前后摄 (后摄为main,前摄省略)为主,例如:
前摄:gc2365_byd;
后摄:gc2365_byd_man;
b.宏命名规则
由全部大写,下划线,数字组成;单词要能基本表达功能说明,
例如:差值30W到200W #define INTERPOLATION_03M_TO_2M
差值200W到500W #define INTERPOLATION_2M_TO_5M
量产项目后期维护,保持老的规则,新项目严格按照新命名规格。
3.代码整理
在具体项目的时候,往往是同一个IC,不用模组厂家会打样;而同一个模组,不同项目会用,这样就造成了代码之间混用,进而混乱。
针对这些情况,在整理代码的时候,一定要遵循命名规则;同时兼顾项目分支,比如同一个模组,在不同项目上使用,可能参数会有差别,这样就可以通过项目分支来解决。
4. 代码同步及更新
调试过的模组要及时更新,在不同项目、平台间要及时同步,保证代码一致性和及时性。
效果一旦确认,代码上库后,除非重大bug或是测试部提出的bug,就不要随意修改,免得混乱不堪。
五.规格书篇
1. IC datasheet
IC Datasheet 是对IC 做了详细的使用说明的,我们调试模组的时候,先要对照datasheet,检查几个简单要点:
适配电压;
IIC地址,Driver ID;
数据位/MIPI设置;
最大支持的曝光gain值;
更高阶一点的,驱动能力,mirror/flip等等。
2. 模组规格书
检查模组规格书和代码中电源、地址、ID、MIPI数组等的指标设置是否和IC datasheet 一致,如若不一致,搞清楚原因;不是必须得100%和IC datasheet一致,比如,大多数情况下,DVDD和IOVDD都需要1.8v电压,在做模组的时候,这两个就可以接一起。
检查模组规格书是否和原理图一致。
不一致的时候,一定要和模组厂,IC原厂,硬件人员沟通,消除疑惑。
3.来料整理
这个小标题并非是指生产来料,而是指从外界获取的资料。
一般来讲,我们会从模组厂获取模组规格书,PCB,原理图;从IC原厂哪里获取IC datasheet,驱动源码。所有这些资料,一定要整理成单独的文件夹,方便查询。
六.驱动篇
由于Chromatix参数文件变动很大,本驱动规则说明以驱动配置为基准。
1. 代码添加规则
a. device-vendor.mk
此mak中需要添加camera驱动文件名称,原则上sensor驱动 和效果参数,包括AF参数、驱动要放在一起,这样整体性就很好,不至于散乱,如下:
# kingsun beck add
MM_CAMERA += libactuator_dw9714_byd_8m
MM_CAMERA += libactuator_dw9714_byd_8m_camcorder
MM_CAMERA += libactuator_dw9714_byd_8m_camera
MM_CAMERA += libmmcamera_ov8856_byd_main
MM_CAMERA += libchromatix_ov8856_byd_main_common
MM_CAMERA += libchromatix_ov8856_byd_main_preview
MM_CAMERA += libchromatix_ov8856_byd_main_default_video
MM_CAMERA += libchromatix_ov8856_byd_main_snapshot
b. sensor_init.c
在此文件中加载camera模组,如下所示:
#define BOARD_SENSORS \
"ov8856_byd_main", \
"gc5005_cxt_main", \
"hi553_byd", \
"gc2365_byd_main", \
"gc2365_byd", \
"gc0339_8909",
如上例所示,应秉承由大像素到小像素,由后摄到前摄的原则。
2. 注释规则
a. 常用注释
如修改镜像,就可以添加:/*bk20160706 modified for camera mirro/flip*/
总之,要求用语明确,具有可追溯性。
b. Camera 模组全注释
示例如下:
F4_6.0:
front 30-to-200W GC0339 0x42 0xc8 chengxiang FF C00300A
back 200-to-500W GC2365 0x6e 0x2365 helitai FF UGX2432M
F6_6.0:
front 500-to-800W HI553 0x40 0x0553 helitai FF BOCP553-HI8310M
back 800-to-1200W GC8024 0x6e 0x8024 chengxiang FF C00303A
原则上要求明确,项目,前后摄,差值,模组IC,地址,ID,模组厂,定焦/聚焦,模组名称等信息。
3. Xxx_lib.c 基本配置
a. 上电规则
先系统电压,再控制信号。
b. Camera 方向
Camera的方向关系到成像的方向,不仅仅是camera 应用,很多用到摄像头的应用都会应用得到,如QQ,微信,易信等等;也许你设置成270,camera应用预览方向是对了,但是别的应用就不一定了,所以必须按照规则设置。
规则如下:
后摄:.sensor_mount_angle = 90
前摄:.sensor_mount_angle = 270
c. 曝光设置
在sensor_lib_ptr 结构体中,必须注释掉.sync_exp_gain = 1,否则会有曝光异常。
4. 冗余代码
Debug所用的冗余代码,要及时清理;如果是后续还有debug用的,建议加入宏来管控。
5. camera缺省值设置
设置如下:
a. hal层
硬件抽象层HAL(初始化,第三方等没有显式调用的时候生效),代码位置如下:
hardware/qcom/camera/QCamera2/HAL/QCameraParameters.cpp
b. SnapdragonCamera应用
我们的源代码应用SnapdragonCamera (显式调用生效),代码位置如下:
packages/apps/SnapdragonCamera/res/value/qcomstrings.xml (qcomarrays.xml定义值)
六.如何快速检验camera
在项目进度的压力下,一般往往要先确认模组是否可用,所以一定要学会如何快速检验camera,方便采购。
在把sensor点亮,预览正常的情况下,检查:
1. 清晰度:
如果画面很模糊的话,一般来讲,通过调试参数也不会好太多,换模组试试,如果换了多颗模组还是如此,那就联系模组厂,果断换镜头。
2. 炫光:
在室内对着灯管或是白炽灯转动手机不同角度,看看是否有炫光,炫光是否严重。
3. 镜头畸变:
看菱角分明的物体或是特定测试图纸,看是否有畸变。
4. Camera开孔是否匹配:
检查预览窗体是否有被触摸盖板遮挡,和结构或是硬件确认问题。
5. 电噪:
手离镜头一到二厘米,挡住镜头,看是否有电噪;如果有的话,找硬件确认电源稳定性;如果硬件没有问题,看是否模组有问题,和模组厂沟通解决。
6. DVDD是否正确:
手离镜头一到二
厘米,挡住镜头,看是否有横条纹,如果有一般是DVDD不对,请硬件帮忙确认。