Camera服务之--架构浅析

Camera服务之--架构浅析

分类: Camera 分析2011-12-22 11:17 7685人阅读 评论(3) 收藏 举报

android硬件驱动框架jnilinux内核平台

一.应用层

Camera 的应用层在Android 上表现为直接调用SDK API 开发的一个Camera 应用APK 包。代码在/android/packages/apps/Camera 下。主要对 android.hardware.Camera(在Framework中) 类的调用,并且实现Camera 应用的业务逻辑和UI 显示。一个Android 应用中若要使用这个android.hardware.Camera类,需要在Manifest 文件声明Camera 的权限,另外还 需要添加一些<uses-feature> 元素来声明应用中的Camera 特性,如自动对焦等。 具体做法可如下:

<uses-permission android:name = "android.permission.CAMERA" />

<uses-feature android:name = "android.hardware.camera" />

<uses-feature android:name = "android.hardware.camera.autofocus" />

二.Framework层

1.android.hardware.Camera:代码位置/android/frameworks/base/core/java/android/hardware/Camera.java

这部分目标是framework.jar。这是是Android 提供给app层调用的java接口。这个类用来连接或断开一个Camera 服务,设置拍摄参数,开始、停止预览,拍照等。

2.android.hardware.Camera这个类是和JNI中定义的类是一个,有些方法通过JNI的方式调用本地代码得到,有些方法自己实现。 
Camera的JAVA native调用部分(JNI):/android/frameworks/base/core/jni/android_hardware_Camera.cpp。Camera.java 承接JAVA 代码到C++ 代码的桥梁。编译生成libandroid_runtime.so 。libandroid_runtime.so库是公用的, 其中除了Camera 还有其他方面的功能。

3.Camera框架的client部分:

代码位置:/android/frameworks/av/camera/下5个文件。

Camera.cpp

CameraParameters.cpp

ICamera.cpp

ICameraClient.cpp

ICameraService.cpp

它们的头文件在/android/frameworks/av/include/camera目录下。

这部分的内容编译生成libcamera_client.so 。在Camera 模块的各个库中,libcamera_client.so 位于核心的位置,作为Camera 框架的 Client 客户端部分,与另外一部分内容服务端 libcameraservice.so 通过进程间通讯(即Binder 机制)的方式进行通讯。

4.Camera框架的service部分:

代码位置:/frameworks/av/services/camera/libcameraservice/。

这部分内容被编译成库libcameraservice.so 。CameraService 是Camera 服务,Camera 框架的中间层,用于链接CameraHardwareInterface 和Client部分 ,它通过调用实际的Camera 硬件接口来实现功能,即下层HAL层。

三.硬件抽象层HAL Hardware Abstraction Layer

这个层次其实就是用户空间的驱动代码。前面有介绍过框架层对下在CameraHardwareInterface.h(/android/frameworks/av/services/camera/libcameraservice/device1/CameraHardwareInterface.h)。 头文件中定义了 Camera 硬件抽象层的接口,它是包含纯虚函数的类,必须被实现类继承才能使用。HAL 层正好继承 CameraHardwareInterface 接口,依据V4l2 规范实例化底层硬件驱动,使用ioctl 方式调用驱动,最终生成 libcamera.so 供框架的libcameraservice.so 调用。

这层的代码在/android/hardware/XXX /libcamera 目录下(也有可能在vendor 目录中对应的 libcamera 下)。注意这里的XXX 是不同厂商为不同产品(板子)而建的目录,以高通msm 平台为例,这里XXX 用msm7k 表示,这样 高通msm 平台下这个HAL 的目录即为/android/hardware/msm7k/libcamera 。不难看出,如果要在某硬件平台上运行 Android ,也就主要在这一层进行修改,因为它是直接和底层硬件驱动相关的。上面也讲过,应用框架层对上对下都定义的标准接口,这样做的目的也就是 使上层的代码独立,在porting 中不受影响。所以我们现在可以基本确定,如果要改Camera 的硬件,框架层以上的部分都可以不动,要改就改 HAL 到内核层的部分,这也是Android 底层开发的主要工作。

四.Driver层

这一层主要是基于Linux 的设备驱动。对Camera 来说,一般是按V4l2 规范将Camera 原子功能以ioctl 的形式暴露出来供 HAL 层调用的实现。

主要功能的实现代码在/android/kernel/drivers/media/video/XXX 下。跟HAL 层目录一 样,XXX 是不同厂商不同平台的目录,以高通msm 平台为例,这个目录就是/android/kernel/drivers/media/video /msm 。所以要在Android 平台上添加硬件功能,首先考虑将它的驱动加到Android 的Linux 内核中。

时间: 2024-10-24 22:58:06

Camera服务之--架构浅析的相关文章

Web服务之Nginx浅析

一.Nginx 简介: nginx [engine x]是Igor Sysoev编写的一个高性能的HTTP和反向代理服务器,另外它也可以作为邮件代理服务器. 在大多数情况下都是用来做静态web服务器和反向代理服务器,在作为反向代理服务器的时候,Nginx可以对后端的real server做负载均衡,基于应用层的负载均衡,但是他仅支持一些常见的协议,如:http.mysql.ftp.smtp. 特性: Nginx是一款面向性能设计的HTTP服务器,相较于Apache.lighttpd具有占有内存少

某移动社交应用服务端架构浅析

原文http://blog.csdn.net/lvjin110/article/details/12958463 TA是一款是基于地理位置的社交应用,帮助你与你不认识的.但就在附近的人进行即时沟通.TA是一款陌生人约会交友应用,无论你在银行排队.乘坐公交.咖啡厅或公园散步等任何地方,随时随地就能与附近有趣的陌生人进行即时沟通.分享照片.约会和交友-- 转眼间,离开该研发团队快半年了,在此期间不少网友问到后端架构,及技术细节.出于技术分享为目的,现将服务端架构及设计思路分享给大家. 如下图: 上图

LAMP架构浅析

  LAMP架构浅析 一.LAMP简介 Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台.LAMP具有Web资源丰富.轻量.快速开发等特点,微软的.NET架构相比,LAMP具有通用.跨平台.高性能.低价格的 优势,因此LAMP无论是性能.质量还是价格都是企业搭建网站的首选平台. 二.本实验目的 通过简单编译

boost.asio源码剖析(二) ---- 架构浅析

* 架构浅析 先来看一下asio的0层的组件图.                     (图1.0) io_object是I/O对象的集合,其中包含大家所熟悉的socket.deadline_timer等对象,主要功能是提供接口给用户使用. services服务是逻辑功能的实现者,其中包含提供定时功能的deadline_timer_service.提供socket相关功能的win_iocp_socket_service(windows平台)/reactive_socket_service(其他

Mosquitto pub/sub服务实现代码浅析-主体框架

Mosquitto 是一个IBM 开源pub/sub订阅发布协议 MQTT 的一个单机版实现(目前也只有单机版),MQTT主打轻便,比较适用于移动设备等上面,花费流量少,解析代价低.相对于XMPP等来说,简单许多. MQTT采用二进制协议,而不是XMPP的XML协议,所以一般消息甚至只需要花费2个字节的大小就可以交换信息了,对于移动开发比较有优势. IBM虽然开源了其MQTT消息协议,但是却没有开源其RSMB服务端程序,不过还好目前有比较稳定的实现可用,本文的Mosquitto是其中比较活跃的实

大中型网站技术架构浅析 - 实时通信

本文所讲述的『实时通信』主要围绕浏览s器端和服务器端之间的实时通信.大中型网站技术架构浅析 系列之一. 实时通信主要分3大类: 1. Pull技术,轮询(Polling) 客户端定时轮询请求,服务器端立刻返回. 优点:短链接,服务器处理方便,支持跨域. 缺点:有一定延迟 微博未读微博数和未读消息(评论,@)就是用polling实现的. 应用场景:对实时性要求不高的应用,如新微博提示,评论提示,回复提示等. 2. Push,反向Ajax(Reverse Ajax)或者叫Comet. 实现方式主要有

面向服务的架构SOA

SOA简介 SCA实现SOA的最佳方式 Apache开源框架Tuscany实现SCA架构 SOA简单描述: SOA(Service-Oriented Architecture)面向服务的体系架构.为了能够深入理解还专门查了单词:Oriented:面向,Architecture:架构,没办法英语太烂!实际上是一个组件模型,他将应用程序的不同功能单(称为服务)通过定义良好的接口联系起来.SOA建立在Web服务的基础之上,他可以看做B/S模型.XML/Web Service 技术之后的自然延伸. 对于

移动App服务端架构设计

移动App服务端架构设计 我从事手机app服务端开发现在已经是3个年头,自己也整理出了一套相对好用的服务架构,写出来,跟大家一起分享.如有不足,还请多指教. 一:基础流程图. 其实有一点还需要加上,就是对json的压缩和加密,一来给用户节约流量,二来防止请求被截取破解我们的参数.具体先压缩后加密还是先加密后压缩这个问题看需求. 看到这个架构设计时,你们可能会说如果程序入口挂了,所有的服务都不可以用了. 所以这个架构的弱点在程序入口处,因此要有一(多)台机器做负载,负载的工具可以是HaProxy(

“微服务” 的架构终将成为产品架构上的主流

在敏捷开发中, 我们确实找到了一个框架,能使领域专家,架构师可共同的协作,设计出一可适应变化的 ROA 架构. 但,我想应该从另一个角度来思考-- 团队中即使领域专家,架构师可共同协作,但毕竟领域专家,架构师都还是人,不是神.所以,到底能从当前的版本中,预测到多少未来需求的变化? 这实在是个无法答复的问题.所以,在实务上,架构到底能承受多少的变化,同样也变成个无法答复的问题. "假如,不走预测变化这条路做架构设计.那架构设计的思维又是什么?" 很简单-- "既然不能有效预测变