Android Camera的2个独立进程 .Camera和ICamera

  次阅读 来源:互联网(转载协议) 2015-09-29 10:05 我要评论(0)

1.Android Camera的2个独立进程

Android Camera 是C/S架构已经被说烂了,但是我还是要把这条记下来,因为我时常会脑袋短路,在client端做些无用的劳动希望来解决问题,那么这个希望真的就是奢望了。

核心自然不用说,是service端。service进程一直负责接收底层Camera 驱动传来的数据,然后传给surface显示出来。

Client端也不是吃干饭的。Client进程虽然不曾拥有任何实质的Camera数据,但是service端为它提供了丰富的接口,它可以轻松的获得Camera数据的地址,然后处理这些数据。

最后再补一句废话,Client和Service是通过Binder通信的。

2.Camera和ICamera

刚开始接触Camera的时候,苦于理不清Camera的工作流程,当我看着看着Camera,摁着键盘Ctrl+】跳来跳去,跳到ICamera出现的时候,顿时心里只有一种感觉,这不是坑爹么!

其实,静下心来,仔细分析一下,也不是很坑爹 >_< ...

ICamera,ICameraClient,ICameraService 全部都属于Android Camera 的 Client端,他们的任务就是负责与Android Camera 的Service端通信。

嗯 还得使下这个图,请注意,我们一直活跃在Android Camera 的 Client端。

按照上图的流程,一路哐哐哐下来,到了Camera.cpp,终于和ICamera扯上关系了。对于上层应用来说,Camera.cpp是最为直接的函数调用和实现。继承于ICameraClient类,典型的Client端的接口实例。

千万不要怕晕,事实是这样的:sp<Camera> camera = Camera::connect();

Camera类通过sp<ICamera> mCamera对象,调用函数。

达到的效果就是好像是在直接调用CameraService::Client的mClient的函数们。

如果你晕了,就表明你没有记住我刚说过的Android Camera Service端 为Android Camera Client端提供丰富的接口。

sp<Camera> Camera::connect()

{

LOGV("connect");

sp<Camera> c = new Camera();

const sp<ICameraService>& cs = getCameraService();

if (cs != 0) {

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

}

if (c->mCamera != 0) {

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

c->mStatus = NO_ERROR;

} else {

c.clear();

}

return c;

}

CameraService的connect函数接口:

sp<ICamera> CameraService::connect(const sp<ICameraClient>& cameraClient) {

..

// create a new Client object

client = new Client(this, cameraClient, callingPid);

mClient = client;

if (client->mHardware == NULL) {

client = NULL;

mClient = NULL;

return client;

}

..

}

就是这里了,创建了一个Client实例对象,并将该实例对象赋值给CameraSevice的类成员mClient,方便其实函数接口对Client的调用。

3.客户都是变态的,Sensor型号必须是多变的

客户总是换硬件方案,那么好吧,我们也要跟着重新移植Android Camera 。一提到移植两个字,许多人都觉得好可怕。我们讨论的是嵌入式,又不是医学,移植个肾脏你抖三抖情有可原,移植个Camera,就是多写个sensor驱动你怕啥?!

本站部分文章来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • teamLab创始人猪子寿之: 抛去衣食住行,我还剩下什么?

    teamLab创始人猪子寿之: 抛去衣食住行,我还剩下什么?

  • Oculus公布原型机,大幅度提升可视角,能实现140°的视场水平

    Oculus公布原型机,大幅度提升可视角,能实现140°的视场水平

  • 2018深圳国际人工智能展览会 2018 shenzhen International Artif

    2018深圳国际人工智能展览会 2018 shenzhen International Artif

  • Michael I. Jordan带你解读百万奖金ATEC蚂蚁人工智能大赛

    Michael I. Jordan带你解读百万奖金ATEC蚂蚁人工智能大赛

网友点评网友点评
阅读推荐阅读推荐

据外媒报道,STEER打造了首款完全自动驾驶停车技术,旨在使常规车辆转变为无人驾驶车辆。STEER的首款技术应用是4级自动驾驶及网络安全停车...

近日,美国软性机器抓手制造商 Soft Robotics 宣布,获得 2000 万美元的融资,本轮投资者包括 Scale Venture Partners,Calibrate Ventures...

据外媒报道,加州车管局发布了《2017自动驾驶脱离报告(California Autonomous Vehicle Disengagement Reports)》,其中谈及了脱离的具体...

用人机语音交互,来解决智能家居适老的问题;通过家庭门禁与安防套件、空气净化套件、可燃气体与有害气体监控套件等相互联动,在不同生活情...