Android Camera分析(13)

2020-12-22 09:00

完整讲解了android中camera的工作机制,代码分析。对了解整个android工作流程会有很大的帮助。

3.4Camera服务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的实现,在这个类的内部又定义了类Client,

CameraService::Client继承了BnCamera。在运作的过程中CameraService::connect()函数用于得到一个CameraService::Client,在使用过程中,主要是通过调用这个类的接口来实现完成Camera的功能,由于CameraService::Client本身继承了BnCamera类,而BnCamera类是继承了ICamera,因此这个类是可以被当成ICamera来使用的。

CameraService和CameraService::Client两个类的结果如下所示:

classCameraService:publicBnCameraService{

classClient:publicBnCamera{};wp<Client>

}

在CameraService中的一个静态函数instantiate()用于初始化一个Camera服务,寒暑如下所示:

voidCameraService::instantiate(){

defaultServiceManager()->addService(String16("media.camera"),newCameraService());

}

事实上,CameraService::instantiate()这个函数注册了一个名称为"media.camera"的服务,这个

服务和Camera.cpp中调用的名称相对应。

Camera整个运作机制是:在Camera.cpp中可以调用ICameraService的接口,这时实际上调用的是

BpCameraService,而BpCameraService又通过Binder机制和BnCameraService实现两个进程的通讯。而BpCameraService的实现就是这里的CameraService。因此,Camera.cpp虽然是在另外一个进程中运行,但是调用ICameraService的接口就像直接调用一样,从connect()中可以得到一个ICamera类型的指针,真个指针的实现实际上是CameraService::Client。

而这些Camera功能的具体实现,就是CameraService::Client所实现的了,其构造函数如下所示:

mClient;

CameraService::Client::Client(constsp<CameraService>&cameraService,

constsp<ICameraClient>&cameraClient):

mCameraService(cameraService),mCameraClient(cameraClient),mHardware(0)

{

mHardware=openCameraHardware();mHasFrameCallback=false;

}

构造函数中,调用openCameraHardware()得到一个CameraHardwareInterface类型的指针,并作为

其成员mHardware。以后对实际的Camera的操作都通过对这个指针进行。这是一个简单的直接调用关系。

事实上,真正的Camera功能己通过实现CameraHardwareInterface类来完成。在这个库当中

CameraHardwareStub.h和CameraHardwareStub.cpp两个文件定义了一个桩模块的接口,在没有Camera硬件的情况下使用,例如在仿真器的情况下使用的文件就是CameraHardwareStub.cpp和它依赖的文件FakeCamera.cpp。

CameraHardwareStub类的结构如下所示:


Android Camera分析(13).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:3G网络优化难点及解决方案译文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: