WEB开发网
开发学院手机开发Android 开发 Android Camera 架构介绍 阅读

Android Camera 架构介绍

 2010-03-18 16:22:00 来源:WEB开发网   
核心提示:一个函数 connect的实现如下所示:sp Camera::connect(){sp c = new Camera();const sp& cs = getCameraService();if (cs != 0) {c->mCamera = cs->connect(c);}if (c->mCamer

一个函数 connect的实现如下所示:

sp Camera::connect()

{

sp c = new Camera();

const sp& cs = getCameraService();

if (cs != 0) {

c->mCamera = cs->connect(c);

}

if (c->mCamera != 0) {

c->mCamera->asBinder()->linkToDeath(c);

c->mStatus = NO_ERROR;

}

return c;

}

connect通过调用getCameraService得到一个 ICameraService,再通过 ICameraService的cs->connect(c)得到一个 ICamera类型的指针。 调用connect将得到一个 Camera的指针,正常情况下Camera的成员 mCamera已经初始化完成。

一个具体的函数startPreview 如下所示:

status_t Camera::startPreview()

{

return mCamera->startPreview();

}

这些操作可以直接对 mCamera来进行,它是ICamera类型的指针。

其他一些函数的实现也与setDataSource类似。

libmedia.so中的其他一些文件与头文件的名称相同,它们是:

frameworks/base/libs/ui/ICameraClient.cpp

frameworks/base/libs/ui/ICamera.cpp

frameworks/base/libs/ui/ICameraService.cpp

在此处,BnCameraClient和BnCameraService类虽然实现了onTransact()函数,但是由于还有纯虚函数没有实现,因此这个类都是不能实例化的。

ICameraClient.cpp中的BnCameraClient在别的地方也没有实现;而ICameraService.cpp中的 BnCameraService类在别的地方被继承并实现,继承者实现了Camera服务的具体功能。

3.4 Camera服务libcameraservice.so

frameworks/base/camera /libcameraservice/ 用于实现一个Camera的服务,这个服务是继承ICameraService的具体实现。

在这里的Android.mk文件中,使用宏USE_CAMERA_STUB 决定是否使用真的Camera,如果宏为真,则使用CameraHardwareStub.cpp和FakeCamera.cpp构造一个假的 Camera,如果为假则使用CameraService.cpp构造一个实际上的Camera服务。

CameraService.cpp是继承BnCameraService

上一页  4 5 6 7 8 9 10 11  下一页

Tags:Android Camera 架构

编辑录入:coldstar [复制链接] [打 印]
赞助商链接