高通CAMIF和OV sensor调试经验分享(转)

高通CAMIF和OV sensor调试经验分享

http://www.mbtrend.com/thread-32066-1-1.html

【摘要】
要借用某高通平台的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        services        Oem层        App层
代码位置        camsensor        camera        Oemcamera.c        Qcamera.c/Qcamcorder.c



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)
其中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时的波形如下图:

你可能感兴趣的:(高通展讯MStar相关)