android camera2参考概述|极客笔记-凯发k8旗舰厅

本文是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,替代已经废弃的接口,新的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设备出现故障时,应用会收到这个异常。

camera课程

python教程

java教程

web教程

数据库教程

图形图像教程

办公软件教程

linux教程

计算机教程

大数据教程

开发工具教程

android camera2参考

网站地图