- 1、本文档共19页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
高通BMP1.0平台调试5M CMOS camera总结
摘要:
本文着重解决BMP1.0平台上的RAW data 输出数据的500万camera sensor的调试。包括驱动层,应用层代码和camera镜头的色彩校准。
我们按照调试的先后顺序进行步骤说明:
我们先说OEM层。OEM层继承了ICAMERA的所有功能,ICAMERA只是一个壳,实现会转到OEMCAMERA。AEE层介于两者之间,公开的代码只是让我们参考,修改无效。
在我们需要使用camera时候,调用CreateCamera,在Create Instance获得句柄后,我们得到一个应用的壳,然后得到具体的与camera应用相关的函数注册。然后通过OEMCamera_SetParm开始启动ACM相关资源,ACM简单的理解,就是图片和相关分支调用函数。详情看OEMCamera_ACMTransaction ()相关函数,这里不是重点,因此点到即止。因为高通在双camera的资源应用上还没有完善,日后和应用在ACM上可能遇上问题,因此才在这里顺带说一下。各位有兴趣可以和应用的多交流。
现在,我们可以从OEMCamera_New()开始,对驱动设计工程师而言,可以理解为camera代码应用的开始。
OEMCamera_New()中,camera_get_sensors所用到的变量,在代码启动的时候已经赋值,因此,并不是为空,这点需要注意,另外,这里还没有开始分配camera提供显示的内存空间,主要是对camera硬件相关进行初始化(想深入了解,看graph_task中的camera_init,这是在service层注册过的函数,再往下说,我怕会开始跑火车,就在这里点到即止,很多东西我们可以从代码中看到更多。我这里提点一下就好)
经常,我们需要trace看sensorInfo里面的信息。我们最关心的是sensor_width和sensor_height,这个是从底层获取的camera输出图像的尺寸。从代码的设计上看,AEECLSID_CAMERA1固定的表示主摄像头,AEECLSID_CAMERA2表示从摄像头(现在手机一般都是双camera,因此单camera的流程就不说了)
现在我们非常关心sevice层的camera应用,在这里涵盖了camera绝大多数的基础代码(指公共服务的接口,)这个文件里的函数,需要认真研究。
首先,我们研究preview的部分:camera_malloc_preview_buffers(),可以看到camera_preview_buffers.buffers[current_buffer].buf_ptr表示preview的buffer的指针,共5块,前3块是给VFE用的,后2块是显示overlay用的。
VFE处理video数据流,图像效果处理,raw数据解析(包括rolloff,gamma,ASF,AWB相关),YCBCR格式拍照解析
显示overlay用途,包括录像buffer的缓冲,屏幕显示的重载。
在raw data buffer中,会带上buffer头标志QCAMRAW ,只有带这个标志的raw buffer,才是合法的,可以参看qcamrawIsHeader()这个函数判断,具体头里面有多少内容,看qcamrawSetHeader()这个函数,很直观的就能解析,这里就不在赘述。
想看preview关于buffer的指针定义,有一个函数camera_set_preview_buffers()很方便,这里面还包括recoding部分的buffer指针定义。
这里提供一个函数camera_calculate_output1_framerate(),可以看到如何用软件的方式看camera preview的帧率,我用过,和实际用示波器查看的结果非常接近,考虑帧率的动态变化,实际用软件的方式比示波器更好。
如果我们想对camera的数据进行一些深入的修改,建议从两个函数入手去追溯:camera_process_qdsp_output1_msg和camera_process_qdsp_output2_msg,这里面有很多图像处理。Output1进行preview;output2进行snapshot。Snapshot的thumbnail放在output1处理。
图像的旋转,camera_svcs_blt_ex(0这个函数是需要的,注意Y 和CbCr是分开存放的。
若是还想向上追溯,可以参看camera_svcs_process_func(),这里是camera一些主要公共功能的消息派发点。具体看函数内部就明白,我就不多说了。
const camera_bestshot_config_type camera_bestshot_tab
文档评论(0)