Open Camera

Android Camera从App层到framework层到HAL层的初始化过程

一曲冷凌霜 提交于 2020-04-07 05:54:07
Android camera 从上到下可以分为四个部分: Application层、 framework层、 HAL(hardware abstract layer)层、 Kernel层 一般面向开发者的话主要集中在Application层和framework层,但是一些厂商需要定制一些属于自己特有的东西的时候会去修改HAL层集成自己的一些东西,至于Kernel层一般的开发人员不会涉及到。 下面是一个简要的camera框架图: APP层通过Java调用framework层的Java类,framework层的不止包含Java类,还包含jni调用和camera client通过IPC Binder绑定获取下层的服务,然后进入HAL层。 在framework层中,Java框架通过JNI的方式调用Native框架,此处的Native作为Client端只给上层应用提供调用接口,而具体的业务实现则是由Server端(CameraService)来实现,Client和Server则是通过Binder的方式进行通讯。单独分析下Camera的C/S架构,其架构图如下 对于Android camera来说,其主要有:initialize,preview,takepicture三个关键点 由于我下载的Android源码的版本是7.1.1,版本较新,所以可能分析的内容和以前不大一样。

视频直播开篇之camera+surface预览

落爺英雄遲暮 提交于 2019-12-06 11:28:52
视频直播之开篇 现在各大网络的直播平台可是不少,但是大家知道视频直播是怎么做的吗?不懂的人可能认为应该和视频录制差不多。但是做android上面实现还是有很大的差别的。 在android上录制本地视频可以用MediaRecord传入相关参数,写入录制的地址,基本就ok了。但是对于视频直播就难一些,首先需要取到视频的数据,再经过硬件的编码,最后再上传。下面看看简单的实现步骤: 1.首先要进行视频的预览,一般预览有三个控件: surfaceview , GLSurfaceView , TextureView ,这三个虽然使用方式上所有差别,但是最终都是要从surface上取数据的。由于android版本对camera部分的改版,在android21之前使用 android.hardware.Camera ,之后又加了 android.hardware.camera2 ,实现起来有多种组合: a.Camera+Surface package com.example.amei.cameraexample; import android.Manifest; import android.content.pm.PackageManager; import android.graphics.ImageFormat; import android.hardware.Camera; import

[Android O] HAL3 之 Open Camera2 流程(一)—— 从 App 到 CameraService

限于喜欢 提交于 2019-12-06 08:51:25
相关文章 [Android O] Camera 服务启动流程简析 [Android O] HAL3 之 Open Camera2 流程(零)—— 概览 [Android O] HAL3 之 Open Camera2 流程(一)—— 从 App 到 CameraService [Android O] HAL3 之 Open Camera2 流程(二)—— 从 CameraService 到 HAL Service [Android O] HAL3 之 Open Camera2 流程(三,完结)—— 从 HAL Service 到 Camera HAL 从 Application 连接到 CameraService,这涉及到 Android 架构中的三个层次:App 层,Framework 层,Runtime 层。 其中,App 层直接调用 Framework 层所封装的方法,而 Framework 层需要通过 Binder 远程调用 Runtime 中 CameraService 的函数。 这一部分主要的函数调用逻辑如下图所示。 下面开始分析相关代码。 App 关于应用这方面,我只是略懂一二,具体的实现就不管它了。 在 App 中,需要调用打开相机的接口,如下。 其中: mCameraManager 是 CameraManager 类的实例。 currentCameraId

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

我是研究僧i 提交于 2019-12-06 07:32:19
近期工作上的业务将要从 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。 来源: https:/

视频直播开篇之camera+surface预览

自古美人都是妖i 提交于 2019-12-05 05:53:32
视频直播之开篇 现在各大网络的直播平台可是不少,但是大家知道视频直播是怎么做的吗?不懂的人可能认为应该和视频录制差不多。但是做android上面实现还是有很大的差别的。 在android上录制本地视频可以用MediaRecord传入相关参数,写入录制的地址,基本就ok了。但是对于视频直播就难一些,首先需要取到视频的数据,再经过硬件的编码,最后再上传。下面看看简单的实现步骤: 1.首先要进行视频的预览,一般预览有三个控件: surfaceview , GLSurfaceView , TextureView ,这三个虽然使用方式上所有差别,但是最终都是要从surface上取数据的。由于android版本对camera部分的改版,在android21之前使用 android.hardware.Camera ,之后又加了 android.hardware.camera2 ,实现起来有多种组合: a.Camera+Surface package com.example.amei.cameraexample; import android.Manifest; import android.content.pm.PackageManager; import android.graphics.ImageFormat; import android.hardware.Camera; import

视频直播开篇之camera+surface预览

无人久伴 提交于 2019-12-05 05:51:30
视频直播之开篇 现在各大网络的直播平台可是不少,但是大家知道视频直播是怎么做的吗?不懂的人可能认为应该和视频录制差不多。但是做android上面实现还是有很大的差别的。 在android上录制本地视频可以用MediaRecord传入相关参数,写入录制的地址,基本就ok了。但是对于视频直播就难一些,首先需要取到视频的数据,再经过硬件的编码,最后再上传。下面看看简单的实现步骤: 1.首先要进行视频的预览,一般预览有三个控件: surfaceview , GLSurfaceView , TextureView ,这三个虽然使用方式上所有差别,但是最终都是要从surface上取数据的。由于android版本对camera部分的改版,在android21之前使用 android.hardware.Camera ,之后又加了 android.hardware.camera2 ,实现起来有多种组合: a.Camera+Surface package com.example.amei.cameraexample; import android.Manifest; import android.content.pm.PackageManager; import android.graphics.ImageFormat; import android.hardware.Camera; import

CAMERA学习(一)-------跟踪应用层到HAL

眉间皱痕 提交于 2019-12-04 21:54:29
publicstatic Camera mCameraDevice; try { Log.d(TAG,"open camera 0"); //writeFile(APK_FILE_PATH,1); Log.d("qyh","opencamera"+System.currentTimeMillis()); mCameraDevice = Camera.open(0);/*打开camera,获取camera实例给mCameraDevice */ Log.d("qyh","sendMessage"+System.currentTimeMillis()); mHandler.sendEmptyMessageDelayed(DISMISS_ALL,500); }catch (Exception e) { Log.e(TAG,"open camera error"); //writeFile(APK_FILE_PATH,0); e.printStackTrace(); return; } try{ mCameraDevice.setPreviewDisplay(holder);/*这个应该是数据的显示部分,待分析*/ }catch (Exception e) { e.printStackTrace(); } Camera.Parameters parameters =

qualcomm camera 学习笔记

旧街凉风 提交于 2019-12-04 09:24:23
高通camera学习笔记概述(一二三四五) http://www.cnblogs.com/potato-coffee/p/4172009.html android camera 预览 app到hal http://blog.csdn.net/tankai19880619/article/details/22795217 电路图,时序图,移植,介绍参数 移植时用 http://www.cnblogs.com/thjfk/p/4086001.html 简单的移植 http://blog.csdn.net/u013531497/article/details/18737111 从上到下,特别全 代码注释很全 http://www.cnblogs.com/joseph-linux/p/3515151.html 音圈马达VCM(Voice Coil Motor)、陶瓷马达(Piezo Motor)、步进马达(Stepper Motor)。 高通自带camera app 相关功能开关 exif相关 getExifData hardware/qcom/camera/QCamera2/stack/mm-jpeg-interface/src$ vi mm_jpeg_exif.cpackages/apps/Camera2$ vi AndroidManifest.xml fh file handle

[Android O] HAL3 之 Open Camera2 流程(一)—— 从 App 到 CameraService

隐身守侯 提交于 2019-12-04 02:34:20
相关文章 [Android O] Camera 服务启动流程简析 [Android O] HAL3 之 Open Camera2 流程(零)—— 概览 [Android O] HAL3 之 Open Camera2 流程(一)—— 从 App 到 CameraService [Android O] HAL3 之 Open Camera2 流程(二)—— 从 CameraService 到 HAL Service [Android O] HAL3 之 Open Camera2 流程(三,完结)—— 从 HAL Service 到 Camera HAL 从 Application 连接到 CameraService,这涉及到 Android 架构中的三个层次:App 层,Framework 层,Runtime 层。 其中,App 层直接调用 Framework 层所封装的方法,而 Framework 层需要通过 Binder 远程调用 Runtime 中 CameraService 的函数。 这一部分主要的函数调用逻辑如下图所示。 下面开始分析相关代码。 App 关于应用这方面,我只是略懂一二,具体的实现就不管它了。 在 App 中,需要调用打开相机的接口,如下。 其中: mCameraManager 是 CameraManager 类的实例。 currentCameraId

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

痴心易碎 提交于 2019-12-03 15:28:22
近期工作上的业务将要从 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