文档章节

Camera Framework学习笔记(1)

adgkns
 adgkns
发布于 2014/02/26 23:52
字数 616
阅读 1019
收藏 17
                                                             主要架构

首先,对Camera架构有个大概的认识。


Android的Camera架构基本由Camera APP, Application Framework(Camera.java), Camera JNI, MediaFramework(CameraService) , Camera HAL, Camera driver等部分构成。

其中CameraService以上部分都基本和硬件没有关系,Camera HAL以下则和硬件关系比较密切。



整体来看,CameraService的架构属于Client/Server架构。Camera APP属于Client端, Camera Service属于Server端。 Camera App和Camera Service通过IPC调用(Binder传输数据), SurfaceFinger和CameraService也是通过IPC调用来实现的。CameraService是运行在MediaServer进程的。SurfaceFlinger也是一个单独进程。



                                           2 Camera.java要点

Camera.java提供了操作Camera的几大功能:

1.open 和 release功能。

2.操纵Camera的参数的功能。

3.Preview功能:

a.将Preview的显示到屏幕上或者是SurfaceTexture上。

b.获取Camera preview Frame的callstack

4.Capture

1.onShutter, JPEG, RAW, " PostView"

5. Lock 和Unlock功能

6. Focus,Zoom及FaceDetection功能

几个辅助小类:

Camera Parameter

camera parameter的设置,包含white balance, color effect, exposure, scene mode, anti-banding, focus mode, preview size, picture size。

Camera.CameraInfo

每个摄像头的前置后置信息,Camera 照片的orientation

Camera.Size

Camera 照片的高和宽

Camera.Face

face-id, 左眼,有眼,嘴的坐标及超出的区域

Camera.Area

高和宽,Auto Focus, Auto Exposure, Auto White Balance的区域(3A)

                                         Camera JNI的要点

1.创建一个持久的Context用于传递Callback从native到Java。

2.持有Java Camera, Face及Area的引用。

3.如果APP请求传递Preview Frame的Copy, 完成 native到Java的 Buffer copy。

4. 从Java Memory Heap分配JPEG照片的内存。

                                    CameraService的要点

1.管理 Camera硬件资源

2.运行在MediaServer进程中

3.是一个SharedLibrary libCameraService.so

主要功能:

a android.permissions.Camera的检查

b 确保只有一个Client 链接到一个Camera硬件对象

c 确保进程连接到一个Camera硬件对象

d 返回Callback给APP层

e 通过Binder访问

f 可用的摄像头个数

g Camera摄像头信息细节

              本文基本属于对exposing the android camera stack一文的部分翻译,由于本文是后续文章的基础。因此载于此。在这里感谢原文作者的PPT,总结架构确实挺好。

英文原版见:https://thenewcircle.com/s/post/1268/Exposing_the_Android_Camera_Stack.pdf


                                  




© 著作权归作者所有

共有 人打赏支持
adgkns
粉丝 15
博文 47
码字总数 16222
作品 0
广州
程序员
私信 提问
Android Camera 架构简析1

前言 最近整体看了一下Android Camera 部分代码,从Framework的Camera 应用框架到 Hardware的Camera HAL 再到 Kernel的 Camera Driver。把对Camera部分的学习整理成笔记,方便理解。 2. 概述...

Jerikc
2012/09/03
0
0
《Pro ASP.NET MVC 3 Framework》学习笔记目录

《Pro ASP.NET MVC 3 Framework》简介: 作者: Adam Freeman 和 Steven Sanderson 出版社: Apress; New 平装: 820页 语种: 英语 ISBN: 1430234040 声明:笔记里面按我自己的理解翻译了大部分...

mszhangxuefei
2012/02/07
0
0
Unity Cinemachine插件学习笔记,实现单目标和多目标之间切换

Unity Cinemachine插件学习笔记,实现单目标和多目标之间切换

martins1994
2018/05/10
0
0
C#可扩展编程之MEF学习笔记(一):MEF简介及简单的Demo

  在文章开始之前,首先简单介绍一下什么是MEF,MEF,全称Managed Extensibility Framework(托管可扩展框架)。单从名字我们不难发现:MEF是专门致力于解决扩展性问题的框架,MSDN中对MEF...

雲霏霏
2014/08/19
0
0
unity3d学习笔记(一) 第一人称视角实现和倒计时实现

unity3d学习笔记(一) 第一人称视角实现和倒计时实现 1. 第一人称视角 (1)让mainCamera和player(视角对象)同步在一起 因为我们的player是生成的,所以不能把mainCamera直接放到预支对象...

qq874455953
2018/05/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

equals()的重写规则

自反性。对于任何非null的引用值x,x.equals(x)应返回true。 对称性。对于任何非null的引用值x与y,当且仅当:y.equals(x)返回true时,x.equals(y)才返回true。 传递性。对于任何非null的引用...

无精疯
19分钟前
2
0
Go基础系列:双层channel用法示例

双层通道的解释见Go的双层通道 以下是一个双层通道的使用示例。注意下面的示例中使用了"信号通道"(Signal channel),但这里的信号通道是多余的,仅仅只是为了介绍。 信号通道不用来传递数据,...

echojson
27分钟前
1
0
PHP文件上传error的错误类型

PHP文件上传error的错误类型 - $_FILES['file']['error'] 有以下几种类型 1、UPLOAD_ERR_OK 其值为 0,没有错误发生,文件上传成功。 2、UPLOAD_ERR_INI_SIZE 其值为 1,上传的文件超过了 ph......

小良下山化了个缘
53分钟前
2
0
分布式项目(四)Mapping Server 数据映射

上回说道CoAp client和server的实现,数据也安装定义的格式发送到了kafka中,接下来就是Mapping server的实现,物理设备数据映射到抽象设备上,并赋予数据业务含义。 iot-mapping 构建iot-m...

lelinked
今天
3
0
使用data pump驱动的外部表移动数据

使用data pump驱动的外部表移动数据 比如我们有一个报表的数据,准备从一个数据库A中移动到另一个数据库B中,如何实现? 这个问题,我们使用带data pump驱动的外部表方式,很容易实现,具体方法如下...

突突突酱
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部