高通 CAMIF 和 OV sensor 调试总结
手机事业部 CDMA 二部 时慧钦
2008 年 2 月
【摘要】
要借用某高通平台的 camera 接口,联合 OV(OmniVision)公司的 sensor,实现手机摄像头的拍照及
录像功能,需要处理两芯片、显示屏和需求配合的问题,在这个过程中遇到并解决了许多问题。
【关键词】
拍照 预览 CAMIF
一、问题的提出
新手上路,第一次见到 ov sensor,第一次认识 Qualcomm 的 CAMIF,没有任何经验,调试中遇到
诸多劫难,如没有预览不到任何象素点、图像色彩不对、拍照无效区域、dispsize 设置不合适预览全屏
问题、黑白模式上层设不成、预览和拍照范围不一致的问题、软件转 90 度压扁问题等等。
二、解决思路
先做基础理论的储备。
VGA :640x480;
QVGA :320x240;
YUV 格式:4:2:2
曝光控制/伽玛增益/白平衡等都是效果方面的调整。
对于象素数较大的 sensor,如 1280x1024,由于数据量较大,通常预览分辨率 640x512 拍照分辨率
是 1280x1024,且拍照时的 PCLK 是预览时的 2 倍,这样可以对 VFE(video front end)来说是同样的
帧速率。
Ov7670 的寄存器 0x15 的 bit6 可以切换 sensor 输出 HREF 或 HSYNC,我们用 HREF。
Camera_process_config_vfe 初始化 VFE 寄存器;
Qcamraw_set_header 设置 sensor 帧头;
代码分层:
层
Drivers
代码位置 camsensor
services
camera Oemcamera.c Qcamera.c/Qcamcorder.c
Oem 层
App 层
Trace32命令:data.image addr. 640. 480. /GS8,可方便的看某buffer地址中的图片,判断取到的预览图
片内容和最终显示的屏上的差异。
camera_qdsp_cb 是收到帧等事件的回调,根据预览和拍照的不同需要,QDSP 会送来不同的格式,
本例中拍照格式是 YUV422PS,预览格式是 RGB565LE。
要得到需要的帧率,需要给 sensor 寄存器设置时加入空白象素和空白行。对于 ov7670,0x92/0x93
加入空白行个数。
帧率的计算按照以下公式:
fps*(640+144)*(510+x)*2 = 12M(Pclk)
1
www.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.com
其中 x 是空行数,{0x92, 0x00},{0x93, 0x00}时,x 为 0,fps 为 15;{0x92, 0x19},{0x93, 0x01}时,
x 为 281(0x119),fps 为 9.67。
如下图 1 是 x 为 0 时的时序图:
图 1 VGA Frame Timing
三、实践情况
3.1 预览
首先关注寄存器设置是否成功,测试发现写完寄存器,再读出的值和写的部分不同,因为某些寄存
器是在自动刷新的。
对于 sensor,只要供电正常,且有 MCLK,就应该有行场同步及 PCLK 信号。开始没有测到信号,
后查出来同步信号在传输过程中由于某管脚对地短路,衰减了。
要保证代码中主芯片和 sensor 侧象素数(宽、高)、同步信号极性(高低电平)和采样频率(PCLK)
设置一致,才能预览。主芯片通过 CAMIF 接口的寄存器设置。在 camera_process_config_vfe 中写入。
软件设置如下:
测出 9.679fps 时的波形如下图:
2
www.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.com
3
www.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.com
4
www.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.com
15fps 的时序如下:
VSYNC High:66ms(约 510=17+480+10 lines)Low 394us 周期约 66ms 即 15fps;
HSYNC High:106us (约 1280 clks) low 24.4us 周期约 130us;
VSYNC 上升沿到 HSYNC 上升沿的 time :1.98ms,约 17 lines;
HSYNC 下降沿到 VSYNC 下降沿的 time :1.57ms,约 10 lines;
PCLK 是 12MHz.
HREF、VSYNC 都用做同步信号,高通新近平台上通过采样同步信号得到数据,有效行前边的无
效行不需精确设置,只要同步信号电平给定即可。检测计数到够一帧才会产生中断数据。
查完一切状态正常,但从 log 文件可以看看主芯片还是是未接到 sensor 的帧;
后再测信号,发现 HREF 信号实际板子上没传到 CPU 子板上。
总结经验:硬件调试时注意,信号测试要逐级测试,从输出一直到输入点上,考虑硬件通路可能存
在的传输问题。硬件电路容易有对地短路的点,如遇到信号传输异常的。可以断电侧对地电阻,确认是
否对地短路。
3.2 拍照无效区域的问题
Dispsize 设为 216x160 可以在 128*160 的屏上全屏预览,但拍出的照片有一条杂色区域,如图所示,
这个问题在默认 Dispsize 设置 128x96 时也有。
30 万像素,数据量比较小,预览和拍照可以用同一分辨率,所以 snapshot 不用重设寄存器,驱动
中重设寄存器引起了拍照无效区域的问题,去掉解决。
5
www.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.com
3.4 预览和拍照范围不一致的问题
CAMIF 输出的是一个横长的图像,在竖长的屏上预览需要裁减,因此造成了用户看到的和拍到的
明显不一致,为解决这个问题,需要把 sensor 从横着放置改为竖直放置,但是所用高通平台没有一个
MDP,即图像旋转的硬件加速器,软件上的旋转可能会增加负担,对此,做了必要的验证工作。
从原理上看,不旋转和旋转 90 度的处理算法没有明显差异。
现象上看,软件令 camera_default_rotation =90,camera 预览和拍照及 camcorder 预览及录下的视频
都顺时针转了 90 度。
用 task profiling 跟踪,不旋转和旋转 90 度占用 CPU 时间一样。详如下图:
旋转:0 度; display size: 216x160; Image size :160*120
九宫格 QCAMERA 预览 拍照 拍照 QCAMERA 预览
旋转:90 度; display size: 216x160; Image size :160*120
九宫格 QCAMERA 预览 拍照 拍照 QCAMERA 预览
3.5 拍小尺寸照片压扁问题
软件和硬件都转过 90 度之后,拍出来的大尺寸照片和预览只有了微小差异,但小照片却被压扁了,
从理论上分析,宽高比等和屏同样很协调,怎么也想不出道理。
最终用仿真器仔细跟踪拍照过程中各参数的设置,找到了原因:预览的 CAMIF window 根据
6
www.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.com
display_aspect_ratio 不同分别基于宽或高来计算,拍照的 CAMIF window 也需要这么处理,否则看到的
和拍到的会不同。
因此在代码上加了类似的处理。
四、效果评价
如此这般,处理完一系列小的绊脚石之后,手机 camera 的功能比较理想的满足了需求,圆满达到
设计目的。
五、推广建议
此实践对类似高通 CAMIF 上外加 ov sensor 开发 camera 的功能的同事都有参考意义。
参考资料
OV7670_DS 20(1.3)-2
80-V6212-1_F_CAMIF_Qcamera
—— 完 ——
7
www.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.comwww.mbtrend.com