Android Camera分析(12)

2020-12-22 09:00

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

if(mDeathNotifier==NULL){

mDeathNotifier=newDeathNotifier();

}

binder->linkToDeath(mDeathNotifier);

mCameraService=interface_cast<ICameraService>(binder);

}

LOGE_IF(mCameraService==0,"noCameraService!?");returnmCameraService;

}

其中最重要的一点是binder=sm->getService(String16("media.camera"));;这个调用用来得到

一个名称为"media.camera"的服务,这个调用返回值的类型为IBinder,根据实现将其转换成类型ICameraService使用。

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

sp<Camera>Camera::connect(){

sp<Camera>c=newCamera();

constsp<ICameraService>&cs=getCameraService();if(cs!=0){

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

}

if(c->mCamera!=0){

c->mCamera->asBinder()->linkToDeath(c);c->mStatus=NO_ERROR;

}returnc;

}

connect通过调用getCameraService得到一个ICameraService,再通过ICameraService的

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

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

status_tCamera::startPreview(){

returnmCamera->startPreview();

}

这些操作可以直接对mCamera来进行,它是ICamera类型的指针。其他一些函数的实现也与setDataSource类似。

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

frameworks/base/libs/ui/ICameraClient.cppframeworks/base/libs/ui/ICamera.cppframeworks/base/libs/ui/ICameraService.cpp

在此处,BnCameraClient和BnCameraService类虽然实现了onTransact()函数,但是由于还有纯

虚函数没有实现,因此这个类都是不能实例化的。

ICameraClient.cpp中的BnCameraClient在别的地方也没有实现;而ICameraService.cpp中的

BnCameraService类在别的地方被继承并实现,继承者实现了Camera服务的具体功能。


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

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

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

马上注册会员

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