一.应用层

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 内核中。

原文地址:http://www.cnblogs.com/senior-engineer/p/4882456.html

Camera服务之--架构浅析相关推荐

  1. 转载-Camera服务之--架构浅析

    一.应用层 Camera 的应用层在Android 上表现为直接调用SDK API 开发的一个Camera 应用APK 包.代码在/android/packages/apps/Camera 下.主要对 ...

  2. Android Camera架构浅析

    原址 1.Camera成像原理介绍 Camera工作流程图 Camera的成像原理可以简单概括如下: 景物(SCENE)通过镜头(LENS)生成的光学图像投射到图像传感器(Sensor)表面上,然后转 ...

  3. 百度交易中台之账房系统架构浅析

    导读:百度交易中台作为集团移动生态战略的基础设施,面向收银交易与清分结算场景,为赋能业务提供高效交易生态搭建.目前支持百度体系内多个产品线,主要包含:小程序,地图打车,百家号,招财猫,好看视频等.本文 ...

  4. Spark in action on Kubernetes - Playground搭建与架构浅析

    前言 Spark是非常流行的大数据处理引擎,数据科学家们使用Spark以及相关生态的大数据套件完成了大量又丰富场景的数据分析与挖掘.Spark目前已经逐渐成为了业界在数据处理领域的行业标准.但是Spa ...

  5. 云计算学习笔记005---Hadoop HDFS和MapReduce 架构浅析

    Java技术qq交流群:JavaDream:251572072 Hadoop HDFS和MapReduce 架构浅析 前言 Hadoop是一个基于Java的分布式密集数据处理和数据分析的软件框架.Ha ...

  6. 车载USB DVR(行车记录仪)的源码架构浅析(基于AndroiidM)

    基于AndroiidM的USB DVR的源码架构浅析,主要讲述大概流程,以便于分析问题. APP层 源码路径: AndroidM/vendor/mediatek/proprietary/package ...

  7. USB 驱动架构浅析

    USB 驱动架构浅析 之前一直概念模糊,最近简单总结了一下 1.USB简介 USB,即Universal Serial Bus(通用串行总线)的缩写,是一个外部总线标准,用于规范电脑与外部设备的连接和 ...

  8. 百度交易中台之订单系统架构浅析

    导读:百度交易中台作为集团移动生态战略的基础设施,面向收银交易与清分结算场景,为赋能业务提供高效交易生态搭建.目前支持百度体系内多个产品线,主要包含:小程序,地图打车,百家号,招财猫,好看视频等.本文 ...

  9. Spring Cloud分布式微服务云架构—源码结构图

    分布式.微服务.云架构 JAVA语言开发.跨平台.高性能.高可用.安全.服务化.模块化.组件化.驱动式开发模式 源码结构 JAVA开发.maven模块化构建.服务独立打包.分布式部署.持续集成.版本控 ...

最新文章

  1. iOS开发之圆角指定
  2. JZOJ.5234【NOIP2017模拟8.7】外星人的路径
  3. “达观杯”NLP算法大赛再启航,丰厚奖金、直通Offer等你来拿!
  4. uml和模式应用 pdf_「企业架构」架构知识库应用简介
  5. java将图片变成圆角_android图片处理之让图片变成圆形
  6. matlab代码cwfac,主成分分析的matlab实现完整程序
  7. Java生鲜电商平台-统一异常处理及架构实战
  8. sha256---利用java自带的实现加密
  9. 从硬核科幻小说《三体》中看嵌入式
  10. SharePoint:扩展DVWP - 第34部分:使用图标形式的表单操作链接
  11. python编程第一站-简单密码字典生成
  12. PS抠图方法[photoshop中文教程]
  13. C# 读取oracle 中文乱码的解决方案
  14. 友谊的小船,说翻就翻
  15. java 基础运算_Java 基础 运算符
  16. js判断ipad pro设备
  17. 计算机辅助翻译在翻译中的应用,计算机辅助翻译系统在翻译教学中的应用
  18. 实验七 12 小数化分数
  19. Sharding Sphere ~ Sharding-jdbc分库分表、读写分离
  20. python话费充值_用Python方法查询移动手机余额话费的源码示例

热门文章

  1. Razor Engine,动态脚本语言,mvc上的语法,适用于文件内容生成,静态网页生成等。...
  2. 换64位Win7了,感觉还行
  3. 计算机频率、内存相关杂谈
  4. python下采样_python + opencv 如何在上采样下采样之后导出图片?
  5. caffe中solver.prototxt文件参数解释
  6. 【Matlab】你想知道在图表标题中显示变量的一切
  7. [云炬创业基础笔记]第二章创业者测试7
  8. 科大星云诗社动态20210904
  9. java制作qq自动回复,求webqq自动回复原理好的实现方法。
  10. jsp可以使用iframe_使用 JavaScript object URLs,可以处理图像、音频和视频