Camera
冻云-FrozenCloud
这个作者很懒,什么都没留下…
展开
-
1.6API2拍摄RAW图
在前一节我们分析了yuv数据的获取方法,这一节进行的raw数据拍照,实际上与yuv数据没有本质的区别。区别仅仅是ImageReader的format为ImageFormat.RAW_SENSOR,并且在createCaptureSession方法中将这个ImageReader的surface传入,其他就与正常拍照流程一致了。需要注意的是RAW的文件保存一般为“.dng”文件格式。由于实现比较简单,这里直接附上Google的官方demo。https://github.com/googlearc原创 2020-06-04 15:12:59 · 746 阅读 · 0 评论 -
1.5 Camera API2输出yuv数据
在前面我们已经知道createCaptureSession方法的第一个参数会传入一个list,一般这个list会有三个值,用于preview的SurfaceView的surface,用于保存拍照数据的ImageReader的surface,和缩略图的surface。如果是拍照模式,ImageReader的surface就替换为MediaRecoder的surface。但是在实际开发中,我们经常需要输出YUV数据,这个数据要如何得到呢。一、Preview的YUV数据对于Preview而言,输出YU原创 2020-06-03 17:56:44 · 704 阅读 · 0 评论 -
2.6camera session创建过程
如第一章所述,得到CameraDevice对象后就可以创建session了,还是以createCaptureSession为例,这是一个抽象方法,我们已经介绍过,它的实现在CameraDeviceImpl中。方法首先将传入的Surface构建OutputConfiguration,OutputConfiguration是输出的Surface的配置,包含一些基本的配置信息。随后调...原创 2019-12-23 17:45:47 · 1538 阅读 · 2 评论 -
2.5 Camera open拾遗
前面把Camera open在Framework的流程已经梳理清楚,但是还有一些细节值得一提。CameraDevice.StateCallback与Executor在open方法中传入了一个Executor对象,这个对象是在执行Callback时使用的。作为一个接口, CameraDeviceImpl中有一个静态内部类CameraHandlerExecutor作为实现。外部调用ch...原创 2019-12-16 18:04:50 · 469 阅读 · 0 评论 -
2.4camera多进程互斥控制
上一节我们提到过handleEvictionsLocked方法是处理相机进程互斥的。这是一个比较重要的方法,随着现在安卓设备的发力点集中到相机上,同一个应用内的多相机的调用,甚至是不同应用打开不同相机的需求都开始出现,从Framework层面来说就是这里在进行管理。根据相机使用的经历,我们应该有以下几个经验两个应用不能同时打开一个camera; 同一个应用,根据平台不同(高通、MTK),...原创 2019-12-09 16:31:08 · 2700 阅读 · 2 评论 -
2.3camera service的connectDevice的过程
在上一节中,我们梳理了camera open在framework中涉及的类和它们的主要功能,但是我们跳过了一些关键的细节,所以在这一章节中,我们将首先来分析connectDevice的过程。首先我们来看在ICameraService.aidl中的定义,接口定义了四个变量callbacks、设备id、应用的包名、clientUid,如果是从openCamera方法调用的,这里就是-1...原创 2019-12-02 16:24:11 · 2092 阅读 · 0 评论 -
2.2Camera open在Framework中的过程
在前面的内容中,我们提到过CameraManager类的主要用途是open camera,这一节我们将详细梳理这一过程在Framework中的类和逻辑。SDK提供的方法最终调用openCameraDeviceUserAsync方法,通过观察我们可以知道最核心的代码只有两行,其中第一句获取了CameraService对象,随后调用了它的connectDevice方法,并返回了一个ICa...原创 2019-11-27 17:51:01 · 740 阅读 · 0 评论 -
2.1 Android启动与CameraService进程加载
从这一章节开始,笔者将对Camera的Framework框架进行分析。对于Camera Framework框架而言,其核心就是CameraService,所以本节将首先探究Camera service是什么,Camera Service是怎么来的。Android框架启动过程Android在开机时,首先装载BootLoader引导程序,进行硬件上电,从初始代码处开始执行初始化,再进行第二...原创 2019-11-25 16:04:12 · 1429 阅读 · 0 评论 -
1.4Metadata与Characteristics
在上一节我们已经学习过Camera的参数通过Session下发到HAL层,这一节我们将详细探索CameraMetadata。在公开的SDK中,除了CameraMetadata类之外,还存在三个继承它的子类,分别是CameraCharacteristics、CaptureRequest、CaptureResult类。通过名字,我们可以轻易地分析出看出CameraCharacteristi...原创 2019-11-20 11:17:10 · 807 阅读 · 0 评论 -
1.3Camera2 Session机制详解及Camera1的对比
想要理解API2的Session机制,不能简单的只从Camera看,而是要结和Sesion本身的概念来看。一、Session机制1、Web应用中的Session计算机领域的Session概念主要来自于Web通信,在网络应用中,称为会话控制。“Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失...原创 2019-11-18 18:31:11 · 1806 阅读 · 0 评论 -
1.2Camera Preview流程及源码分析
Camera API2的预览实现在网上有非常多的代码可以参考,包括Google官方提供的Demo。直接看代码,模仿、改写当然是最快的实现方式,但如果其中的逻辑关系可能没有捋顺清楚,在没有参考代码的情况下,能否同样实现相关功能就值得商榷了。1API2架构图这个图是一个常见的用于展示API2架构的图,但事实上这个图并不能对架构和开发起到很好的帮助。这个图的主要问题是无法搞清楚Came...原创 2019-11-14 18:29:43 · 1563 阅读 · 1 评论 -
1.1Android Camera源码路径及类简介
Camera API是Android APP开发的主要方式,Android 9.0主要有1.0和2.0两个版本。目前Google在全面推API2,但是应用市场上的主流应用大部分依然使用的是1.0,如QQ、微信等;而一般手机自带的相机应用都是Camera API 2. 本文及后续都将以API2为主,涉及代码部分将以Kotlin为主,Android源码部分以官方开源版本为准。一...原创 2019-11-13 11:00:43 · 1315 阅读 · 0 评论