Android Camera2参考概述

本文是Camera2参考概述,介绍 android.hardware.camera2中重要的类。

文章翻译并整理自 https://developer.android.google.cn/reference/android/hardware/camera2/package-summary

视频在线观看:

加入知识星球与更多Camera同学交流

  • 星球名称:深入浅出Android Camera
  • 星球ID: 17296815

android.hardware.camera2是Android设备上访问Camera硬件设备的SDK,这是最新的Camera API,替代已经废弃的Camera接口,新的API我们称为Camera2 API。

Camera Pipeline

Camera设备被抽象成一个Pipeline模型,这个Pipeline的输入有两个:

  1. 从Sensor获取到待处理的一帧一帧数据
  2. 从应用设置下来的一个一个处理请求(CaptureRequest)

数据与处理请求是一一对应的关系,每一帧数据对应一个独立的CaptureRequest。

Pipeline的输出也有两个:

  1. 每帧数据的处理结果(CaptureResult),通常会分阶段输出多个CaptureResult,因此会是多个CaptureRequest组成的一整包结果(TotalCaptureResult)
  2. 处理后的每帧数据,通常会被拆分成多路流输出(比如:预览流,视频流,拍照流等等)

这些CaptureRequest是按照顺序一个一个被处理的,通常需要150~300ms才能处理完一个CaptureRequest,为了达到至少30fps的帧率,就需要在整个Pipeline中有多个CaptureRequest同时被处理,这些正在被处理的CaptureRequest分别处于不同的阶段。

CameraManager

可以通过CameraManager去枚举、查询和打开Camera设备。

CameraCharacteristics

每个Camera设备都有一组静态属性信息,这组静态属性信息描述该Camera设备的能力,可用的参数等,称之为CameraCharacteristics。CameraCharacteristics可以通过CameraManager#getCameraCharacteristics获取。

Camera图像数据处理组件

预览

通常,我们使用SurfaceView或者TextureView(本质上使用SurfaceTexture)接收预览图像数据。

拍照

通过ImageReader来获取拍照图像数据,设置Format为JPEG时获取到Jpeg图像,设置Format为RAW_SENSOR时获取到RAW16图像(可以传给DngCreator生成DNG格式的RAW)。

后处理

应用程序通过SurfaceTexture或ImageReader(设置Format为YUV_420_888)接收到YUV图像数据后,可以送给OpenGL ES,RenderScript等组件进行处理。

CaptureRequest

应用程序在获取图像数据前需要先创建CaptureRequest,CaptureRequest包含两部分信息:

  1. 处理某一帧数据的参数设置列表
  2. 这一帧数据分成多少路数据流

调用CameraDevice#createCaptureRequest(int)获取到CaptureRequest.Builder,通过Builder来创建CaptureRequest。

CaptureRequest创建好后,可以通过两类方法将CaptureRequest送给Camera设备进行处理:

  1. CameraCaptureSession#capture,有burst模式,可以一次送多个CaptureRequest
  2. CameraCaptureSession#setRepeatingRequest,有burst模式,可以一次repeating一组CaptureRequest

Repeating方式送CaptureRequest的优先级低于capture方式送CaptureRequest,所以在repeating过程中,如果有capture方式的CaptureRequest送下来,则会放在插入在repeating队列的最前面,以便有更高优先级送给Camera设备处理。

CaptureResult

CaptureRequest处理完后,Camera设备会产生一个TotalCaptureResult 对象用于描述这一帧数据最终生效了哪些设置参数。实际生效的参数可能跟CaptureRequest里面填的参数有比较大的差异。

除了设置参数外,CaptureRequest里面设置的每一个Output Surface都会收到一帧图像数据。

应用收到图像数据和对应的CaptureResult是异步的,甚至有时候收到两者的时间点差别较大。

Camera2 API类

类名 功能描述
CameraCaptureSession 基于某个CameraDevice创建出来的CameraCaptureSession,有两个用途:1. 从CameraDevice获取数据流;2. 再次处理同Session获取到的数据流。
CameraCaptureSession.CaptureCallback 一个回调对象,用于跟踪CameraDevice处理CaptureRequest的进度。
CameraCaptureSession.StateCallback 一个回调对象,用于跟踪CameraCaptureSession的状态变化。
CameraCharacteristics 描述CameraDevice的静态属性信息。
CameraCharacteristics.Key 传递给CameraCharacteristics#get的参数,对应某个参数的Key。
CameraConstrainedHighSpeedCaptureSession 用于高帧率录像的CameraCaptureSession,通常size是会受到限制的。
CameraDevice 用于描述一个逻辑上的Camera设备(有可能对应物理上多个Camera设备)。
CameraDevice.StateCallback 一个回调对象,用于接收Camera设备的状态变化。
CameraExtensionCharacteristics 用于查询Camera Extensions支持的功能和分辨率。
CameraExtensionSession Camera Extensions使用的CameraCaptureSession,通常是多帧拍照或复杂的后处理拍照。
CameraExtensionSession.ExtensionCaptureCallback 一个回调对象,用于跟踪CameraDevice处理CaptureRequest的进度。
CameraExtensionSession.StateCallback 一个回调对象,用于跟踪CameraExtensionSession的状态变化。
CameraManager 是一个System Service,用于检测、描述和连接Camera设备。
CameraManager.AvailabilityCallback 一个回调对象,用于通知应用某颗Camera能否被使用。
CameraManager.TorchCallback 一个回调对象,用于跟踪闪光灯模式切换,闪光灯是否可用状态。
CameraMetadata Camera参数的基类。
CameraOfflineSession 离线模式的CameraCaptureSession,通过调用CameraCaptureSession#switchToOffline切换到离线模式。
CameraOfflineSession.CameraOfflineSessionCallback 一个回调对象,用于跟踪CameraOfflineSession的状态。
CaptureFailure 用于描述处理某帧图像出现错误的报告。
CaptureRequest 图像处理的请求,CaptureRequest创建后里面的内容是不可变的,包含处理图像的参数设置列表和输出数据流信息。
CaptureRequest.Builder 用于创建CaptureRequest对象。
CaptureRequest.Key CaptureRequest.Builder#set(Key, Object)使用的参数Key。
CaptureResult 某帧数据处理后的结果参数信息,一个CaptureResult可能只包含一部分结果参数信息。
CaptureResult.Key CaptureResult#get使用的参数Key。
DngCreator DngCreator用于将RAW16转换为DNG。
MultiResolutionImageReader MultiResolutionImageReader封装了多个ImageReader,这些ImageReader具有相同的buffer format,但在size、source camera id或者sensor mode可能不一样。
TotalCaptureResult 某帧数据处理后的所有结果参数信息。

Camera2 API异常类

类名 功能描述
CameraAccessException 当无法打开Camera设备,或者已打开的Camera设备出现故障时,应用会收到这个异常。
赞(27)
未经允许不得转载:极客笔记 » Android Camera2参考概述

  • 暂无文章

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
Android Camera2参考
Android Camera2参考概述
Android Camera2参数参考
Android Camera2参数参考概述
Android Camera2指南
Android Camera2指南概述
Android Camera HAL开发
Android Camera HAL开发概述
Android Camera2 API
第2讲 Android Camera 架构介绍第3讲 Camera2 API 概述第4讲 Open和Close Camera流程第5讲 GeekCamera2介绍第6讲 Open和Close Camera代码实现第7讲 Hardware Level详解第8讲 AVAILABLE_CAPABILITIES详解第9讲 StreamConfigurationMap详解一第10讲 StreamConfigurationMap详解二第11讲 StreamConfigurationMap实战一第12讲 StreamConfigurationMap实战二第13讲 为什么需要OutputConfiguration第14讲 OutputConfiguration API详解第15讲 Surface Sharing实战第16讲 Deferred Surface实战第17讲 Reprocessable Capture Session详解一第18讲 Reprocessable Capture Session详解二第19讲 App如何实现ZSL功能第20讲 SessionConfiguration详解第21讲 createCaptureSession详解第22讲 SessionParameter实战第23讲 CaptureRequest详解第24讲 如何操作VendorTag第25讲 获取Physical Camera数据流第26讲 CameraCaptureSession详解第27讲 CameraCaptureSession.CaptureCallback详解第28讲 GeekCamera2连拍实战第29讲 SlowMotion实战第30讲 CaptureResult详解第31讲 AE自动曝光 Part 1第32讲 AE自动曝光 Part 2第33讲 AE自动曝光实战第34讲 AE手动曝光第35讲 AE手动曝光实战第36讲 Flash闪光灯控制第37讲 拍照打闪实战第38讲 通过CropRegion控制Zoom缩放第39讲 通过ZoomRatio控制Zoom缩放第40讲 Digital Zoom缩放实战第41讲 Touch AE实战第42讲 AF自动对焦第43讲 AF自动对焦 第二部分第44讲 AF自动对焦实战第45讲 手动对焦实战第46讲 AWB自动白平衡第47讲 AWB自动白平衡实战第48讲 FD人脸检测第49讲 Android13 Camera2 New APIs介绍