Chinaunix首页 | 论坛 | 博客
  • 博客访问: 362067
  • 博文数量: 79
  • 博客积分: 1270
  • 博客等级: 中尉
  • 技术积分: 1370
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-12 08:48
个人简介

freedom~~~~~~~~~~

文章分类

全部博文(79)

文章存档

2014年(10)

2013年(2)

2012年(13)

2011年(54)

分类: C/C++

2012-02-14 15:08:50

camera.java中直接通过Jni调用c++层的方法到

android_hardware_camera.cpp

例如
->android_hardware_Camera_checkInputStatus
完了通过camera->checkInputStatus();
其中camera通过是camera的sp指针,通过get_native_camera得到
从而获得了一个camera对象

下面看一下camera类的实现
class Camera : public BnCameraClient, public IBinder::DeathRecipient

下面觉得有些变量已经有了填充,从新理一下
上面首先open直接调用,camera.java中的open方法
public static Camera open(int cameraId) 
{
        return new Camera(cameraId);
}
这个方法调用到构造函数中New了一个camera,传入cameraId
然后调到本类的方法
native_setup(new WeakReference(this), cameraId)
这个方法通过Jni调用到android_hardware_camera.cpp中的方法:
android_hardware_Camera_native_setup()
这里初始化了一个camera
sp camera = Camera::connect(cameraId);
调用camera类的connect方法传入cameraId
在camera.cpp中的connect()方法中
sp c = new Camera();
const sp& cs = getCameraService();
new了一个camera对象,然后获得media.camera的服务binder
const sp& cs = getCameraService();
c->mCamera= cs->connect(c,cameraId);------------------1
然后调用到cameraService中的connect方法
因为iCameraService中有connect方法,拿到的是cameraService的对象
因此调到了cameraService中的方法。
cameraService.cpp中的方法
p CameraService::connect(
    const sp& cameraClient, int cameraId)
return client
其中client即为iCamera继承自BnCamera继承自iCamera的子类

后面调到camera.cpp中的

如startPreview方法,

status_t Camera::startPreview()
{
LOGV("startPreview");
sp c = mCamera;
if (c == 0) return NO_INIT;
return c->startPreview();
}

全部是调用的上1中返回的client中的方法。因为拿到的是client的对象.

然后把camera的对象c返回


下面分析上面cameraService.cpp中的connect方法
sp hardware = HAL_openCameraHardware(cameraId)
connect中new client把hardware传递给client类中的成员mHardware = hardware;
后面全部是用mHardware的方法,即下面的hardwareHal中的方法。
从这里拿到hardwareHal的对象下面调用的全部是hardwareHal中的方法。
status_t CameraService::Client::startPreviewMode()
mHardware->previewEnabled())
可以看出是用的hardwareHal中的方法。

至此framework中的camera架构已经解析完毕。

下面看hardware层中的camera的调用方式:

hardware中的架构比较简单一点没有那么绕,如果有时间就分析一下。





阅读(3292) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~