Android Camera Subsystem 架构(Binder机制)及显示分析

gongzhiyao0 2011-09-08

1 Camera Architecture (Binder机制应用)

该部分主要借助Camera Subsystem分享自己对binder的理解。对该部分的阅读不需要太多对Camera子系统的了解,结合大体类图,顺着我的思路也可以学习binder设计思想。通过我个人的一个思考路线,来阐述如何将binder通信机制嵌入到一个Subsystem中。通过这部分的启发,可以帮助大家应用binder通信机制,可以为Android Framwork开发更多的服务。也希望大家在阅读的时候,给我一些指导,同时帮助我更深的理解Android。大家看到的结构图和类图,我会尽快更新,因为这两个图是我大概在三个月之前刚接触项目,大概浏览下源码简单了解结构之后画的,大体方向没有错误,但是缺少一些细节,最近工作比较忙,没来的及更新。项目release之后我会添加详细结构图及类图。

2 Camera Display

该部分主要是结合自己对Camera Subsystem中涉及的Display的一个分析,帮助大家尽快理解Camera Subsystem。对这块的理解需要一些Android基础知识和Camera Subsystem源码基础。代码可能和你看到的源码不是很一样,因为已经是修改过的,包括Capture和Recording都可以很健壮的运行,而且已经过严格测试。

1、Camera Architecture

(1)Camera Architecture

 Android Camera Subsystem 架构(Binder机制)及显示分析

(2)Camera File

 

           Android Camera Subsystem 架构(Binder机制)及显示分析

 

 (3)Camera Framework

 

 Android Camera Subsystem 架构(Binder机制)及显示分析

 

上面的类图只是一个简单的继承关系,并没有体现出很多细节,只供大家参考。ICamera、ICameraClient、ICameraServices三个类是按照Binder IPC要求的框架实现的。类Camera与CameraService端通过Binder IPC机制来实现具体的功能。 Camera类通过getCameraService()向ServiceManager发出请求,得到了一个名字为“media.camera”的CameraService实例。 通过调用CameraService提供的接口connect()在CameraService端new一个CameraService::Client类的对象mClient,通过connect将该对对象返回给Camera Client端 。随后Camera通过这个sp<ICamera> mCamera对象调用函数就如同直接调用CameraService::Client类的函数。 CameraService::Client 在CameraService内部真正处理由Camera Client发往Camera Service的请求和由 Camera  HAL返回的数据及notify信息。其中之前的callback函数和Camera HAL都以成员变量的形式存在于 class Client。

相关推荐