Open Camera

[Android O] HAL3 之 Open Camera2 流程(零)—— 概览

白昼怎懂夜的黑 提交于 2019-12-03 15:10:53
近期工作上的业务将要从 HAL1 迁移到 HAL3 了,为了早日进入正常业务状态,我得提前把 Camera HAL3 的几个重要流程追踪一遍。 按照 HAL1 时候的思路,我打算从 Open Camera,即打开相机的流程开始分析。打开相机的流程就是打通 APP 到相机设备之间的连路的过程,按照 Android 的五层架构从上到下依次打通下行控制路线,并通过部署回调来构建上行的状态、数据路线。 这次在业务组内部已经有过一些培训,培训中给出了 HAL3 流程的大体框架,不过光是听培训能掌握到的内容少之又少,必须要再花时间根据这些线索去追踪代码,分析具体流程。 我打算在分析完打开相机流程之后,再把 Start Preview 与 Take Picture,即预览和拍照流程简单分析一轮,争取把 HAL3 的控制流和数据流摸个大概。 在业务培训时,有提到过 Camera HAL3 构建连路的过程,其总体框架可以通过下图直观地感受一下。 红色虚线是上行路线,黑色虚线则是下行路线。 接下来关于打开相机流程分析的系列文章,都将基于这个总体框架来跟踪代码,分析流程。 总的来说,会分成三大部分来分析: 从 App 连接到 CameraService; 从 CameraService 连接到 HAL Service; 从 HAL Service 连接到 Camera HAL。 来源: oschina

Android 8.0系统源码分析--openCamera启动过程源码分析

故事扮演 提交于 2019-12-01 11:48:35
今年一进公司就开始搞相机开发,一直是在搞相机应用层,不过自己的学习心一直没停,闲暇之余就研究一下相机的framework、HAL层的东西,平时工作中碰到的和自己接触到的,相机中最复杂的就是预览了,有了一些体会也不想放下,所以决定写一系列关于Android相机的博客,把自己学习到的东西记录下来。 说起Android相机的东西,从应用层的角度来看,基本就是四个重要的节点了:openCamera、createCaptureSession、preview、capture,最复杂的就是preview了,要理解preview,那么就要求大家对Android的View显示系统有一定的理解,才能更好的理解相机的预览。相机的预览其实就是使用预览区的SurfaceView对应的surface创建一条预览流,然后framework从预览surface当中获取到显示buffer,这里用于显示的buffer会根据数量来获取,华为手机的相机framework+HAL两部分一般总共需要7个buffer,每个buffer都对应预览区的一屏的大小,它就是HAL、算法各层填充完毕后,要交给SurfaceFlinger用于显示的预览区大小的所有像素点的byte数组,这7个buffer每次在CameraServer进程获取一个,然后通过HIDL下发给CameraDaemon进程,交给算法、HAL层进行着色渲染

android6.0源码分析之Camera2 HAL分析

你说的曾经没有我的故事 提交于 2019-11-30 06:48:33
在上一篇文章对Camera API2.0的框架进行了简单的介绍,其中Camera HAL屏蔽了底层的实现细节,并且为上层提供了相应的接口,具体的HAL的原理,个人觉得老罗的文章Android硬件抽象层(HAL)概要介绍和学习计划分析的很详细,这里不做分析,本文将只分析Camera HAL的初始化等相关流程。 以下是Camera2的相关文章目录: android6.0源码分析之Camera API2.0简介 android6.0源码分析之Camera2 HAL分析 android6.0源码分析之Camera API2.0下的初始化流程分析 android6.0源码分析之Camera API2.0下的Preview(预览)流程分析 android6.0源码分析之Camera API2.0下的Capture流程分析 android6.0源码分析之Camera API2.0下的video流程分析 Camera API2.0的应用 1、Camera HAL的初始化 Camera HAL的初始加载是在Native的CameraService初始化流程中的,而CameraService初始化是在Main_mediaServer.cpp的main方法开始的: //Main_mediaServer.cpp int main(int argc __unused, char** argv){ … sp

Android Camera原理之CameraDeviceCallbacks回调模块

帅比萌擦擦* 提交于 2019-11-29 05:31:47
在讲解 《Android Camera原理之openCamera模块(二)》 一文的时候提到了CameraDeviceCallbacks回调,当时没有详细展开,本文我们详细展开讲解一下。 CameraDeviceCallbacks生成过程: 《Android Camera进程间通信类总结》 中 2.ICameraDeviceCallbacks.aidl 详细总结了CameraDeviceCallbacks的生成过程。 frameworks/av/camera/ndk/impl/ACameraDevice.h 中回调接口如下。这个CameraDeviceCallbacks是openCamera的时候设置到camera service端的,后续HAL层有camera响应的话会调用 ACameraDevice.h 中的 ServiceCallback 接口来实现回调。我们需要从流程上搞清楚这些回调是在什么场景下触发的,明白了这些,才真正明白camera capture的流程。 // Callbacks from camera service class ServiceCallback : public hardware::camera2::BnCameraDeviceCallbacks { public: explicit ServiceCallback(CameraDevice*

Android Camera原理之openCamera模块(二)

£可爱£侵袭症+ 提交于 2019-11-27 20:58:15
在上一篇文章《Android Camera原理之openCamera模块(一)》我们主要介绍了openCamera的调用流程以及camera模块涉及到的4个层次之间的调用关系,但是一些细节问题并没有阐释到,本文我们补充一下细节问题,力求丰满整个openCamera模块的知识体系。 在 《Android Camera模块解析之拍照》 一文中谈到了调用openCamera方法: manager.openCamera(mCameraId, mStateCallback, mBackgroundHandler); 这个manager就是CameraManager实例,openCamera方法上一篇文章已经介绍地比较清楚了,但是第二个参数mStateCallback没有深入讲解,大家只知道是一个相机状态的回调,但是这个状态很重要。这个状态回调会告知开发者当前的camera处于什么状态,在确切获得这个状态之后,才能进行下一步的操作。例如我打开camera是成功还是失败了,如果不知道的话是不能进行下一步的操作的。 private final CameraDevice.StateCallback mStateCallback = new CameraDevice.StateCallback() { @Override public void onOpened(@NonNull

Android Camera原理之openCamera模块(一)

≡放荡痞女 提交于 2019-11-27 20:57:55
我们平时开发,知道怎么调度api,怎么调起camera,怎么调用camera的实例来操作camera就可以了,但是这些调度的背后都做了什么事情,我们可能不太清楚,本文打算从openCamera这个调用谈起,展开说下camera调起之后底层是怎么工作的? Camera操作过程中最重要的四个步骤: CameraManager-->openCamera ---> 打开相机 CameraDeviceImpl-->createCaptureSession ---> 创建捕获会话 CameraCaptureSession-->setRepeatingRequest ---> 设置预览界面 CameraDeviceImpl-->capture ---> 开始捕获图片 1.CameraManager CameraManager是本地的SystemService集合中一个service,在SystemServiceRegistry中注册: registerService(Context.CAMERA_SERVICE, CameraManager.class, new CachedServiceFetcher<CameraManager>() { @Override public CameraManager createService(ContextImpl ctx) { return new

Android Camera进程间通信类总结

一笑奈何 提交于 2019-11-27 06:38:51
《Android Camera架构》 《Android Camera进程间通信类总结》 《Android Camera模块解析之拍照》 《Android Camera模块解析之视频录制》 《Android Camera原理之CameraDeviceCallbacks回调模块》 《Android Camera原理之openCamera模块(一)》 《Android Camera原理之openCamera模块(二)》 《Android Camera原理之createCaptureSession模块》 《Android Camera原理之setRepeatingRequest与capture模块》 《Android Camera原理之编译》 《Android Camera原理之camera provider启动》 《Android Camera原理之cameraserver与cameraprovider是怎样联系的》 《Android Camera原理之camera service与camera provider session会话与capture request轮转》 《Android Camera原理之camera HAL底层数据结构与类总结》 《Android Camera原理之camera service类与接口关系》 我们直达camera模块的代码根据层次可以分为下面几层

Android Camera原理之createCaptureSession模块

試著忘記壹切 提交于 2019-11-27 06:03:08
《Android Camera架构》 《Android Camera进程间通信类总结》 《Android Camera模块解析之拍照》 《Android Camera模块解析之视频录制》 《Android Camera原理之CameraDeviceCallbacks回调模块》 《Android Camera原理之openCamera模块(一)》 《Android Camera原理之openCamera模块(二)》 《Android Camera原理之createCaptureSession模块》 《Android Camera原理之setRepeatingRequest与capture模块》 《Android Camera原理之编译》 《Android Camera原理之camera provider启动》 《Android Camera原理之cameraserver与cameraprovider是怎样联系的》 《Android Camera原理之camera service与camera provider session会话与capture request轮转》 《Android Camera原理之camera HAL底层数据结构与类总结》 《Android Camera原理之camera service类与接口关系》 Camera操作过程中最重要的四个步骤:

Android Camera原理之setRepeatingRequest与capture模块

那年仲夏 提交于 2019-11-27 06:02:56
Camera操作过程中最重要的四个步骤: CameraManager-->openCamera ---> 打开相机 CameraDeviceImpl-->createCaptureSession ---> 创建捕获会话 CameraCaptureSession-->setRepeatingRequest ---> 设置预览界面 CameraDeviceImpl-->capture ---> 开始捕获图片 之前我们介绍了openCamera流程和createCaptureSession流程,如下: 《Android Camera原理之openCamera模块(一)》 《Android Camera原理之openCamera模块(二)》 《Android Camera原理之createCaptureSession模块》 至此,Camera 会话已经创建成功,接下来我们可以开始预览了,预览回调onCaptureCompleted之后就可以拍照(回调到onCaptureCompleted,说明capture 完整frame数据已经返回了,可以捕捉其中的数据了。),由于预览和拍照的很多流程很相似,拍照只是预览过程中的一个节点,所以我们把预览和拍照放在一文里讲解。 1.预览 预览发起的函数就是 CameraCaptureSession-->setRepeatingRequest

Android Camera模块解析之视频录制

南楼画角 提交于 2019-11-27 06:00:04
《Android Camera架构》 《Android Camera进程间通信类总结》 《Android Camera模块解析之拍照》 《Android Camera模块解析之视频录制》 《Android Camera原理之CameraDeviceCallbacks回调模块》 《Android Camera原理之openCamera模块(一)》 《Android Camera原理之openCamera模块(二)》 《Android Camera原理之createCaptureSession模块》 《Android Camera原理之setRepeatingRequest与capture模块》 《Android Camera原理之编译》 《Android Camera原理之camera provider启动》 《Android Camera原理之cameraserver与cameraprovider是怎样联系的》 《Android Camera原理之camera service与camera provider session会话与capture request轮转》 《Android Camera原理之camera HAL底层数据结构与类总结》 《Android Camera原理之camera service类与接口关系》 之前讲解过camera2