Camera解读
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Camera 分析
话说camera模块,从上层到底层一共包含着这么几个部分:
1、apk------java语言
2、camera的java接口----java语言
frameworks/base/core/java/android/hardware/Camera.java
3、camera的java接口的具体实现,即所谓的JNI-----(java—>C++)
native_setup(Object camera_this, int cameraId);此处通过红色native字段可以确定native_setup调用的就是jni接口.即frameworks/base/core/jni/android_hardware_Camera.cpp中具体实现了这个函数,让我们来看看它是是如何转接这个函数的.
4、camera客户端-----C++语言
5、camera服务器----C++语言
后半部分代码
1.mModule 怎么赋值的呢?原来它是由void CameraService::onFirstRef()调用时候去得到hardware中相关接口
找了半天也就是它这个函数里边有hw_get_module()这个函数,一看名字就知道是获取hardware的,不找它找谁啊。
那么onFirstRef()函数又是何时调用的?
onFirstRef()属于其父类RefBase,该函数在强引用sp新增引用计数时调用,什么意思?就是当有sp包装的类初始化的时候调用。
这里在
frameworks/base/services/camera/libcameraservice/CameraService.h 中class CameraService :中有定义
2.client->initialize(mModule) client根据deviceVersion 决定是哪个类实例(CameraClient、Camera2Client)
以CameraClient为例
6、camera硬件抽象层,即所谓的HAL------C++语言
在open 函数最后一段就是实例化具体某个摄像头
7、camera驱动
如上也是camera的整个调用流程.
但是,如此泛泛而谈,实在是太空了.想当初刚开始搞camera,单单驱动的V4L2已经够头大了,何况要涉及调试具体sensor的图像帧率,频率,输出格式等等,更不要说什么DMA对齐,图像闪动,色彩不对之类的疑难杂症了.
还是分别讲讲它们分别的作用吧
Camera的驱动在哪里呢?我们以N818S来分析
首先我们进入shell命令找到摄像头驱动名称
然后进入kernel搜索关键字
根据头文件一步步找到了
board-rk3168-tb.c是主板加载文件
这是配置摄像头引脚,配错了的话就起不来了
还引用了rk30_camera.c文件
rk30_camera.c中引用了rk_camera.c文件
如何添加新的相机驱动?
主要修改文件
v4l2-chip-ident.h、rk_camera.h、board-rk3168-tb-camera.c 曾加文件
gc0909.c 参照gc0308.c 格式
详细修改。