Bootstrap

Android Camera2 API 学习笔记2

CameraCharacteristics.Key

Public methods
ReturnNameDescription
booleanequals(Object o)某个对象是否与这个相等
StringgetName()返回camelCase形式名字
inthashCode()返回对象的哈希编码值
StringtoString()返回字符串形式的CameraCharacteristics.Key

CameraConstrainedHighSpeedCaptureSession

通过向 createConstrainedHighSpeedCaptureSession(List, CameraCaptureSession.StateCallback, Handler) 提供一组目标输出表面创建 CameraHighSpeedCaptureSession,一旦创建,会话被激活,直到相机设备创建新的会话,或者相机设备关闭。

激活的高速捕获会话是一个特别的捕获会话,针对于高速(>=120fps)的视频记录情况,当相机支持高速摄像(例如,REQUEST_AVAILABLE_CAPABILITIES 包含 REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO)。它只接受通过
createHighSpeedRequestList(CaptureRequest) 创建的请求列表,请求列表只能通过 captureBurst 或者 setRepeatingBurst 提交到这个会话.
创建一个会话是一个费时的操作,可能需要几百毫秒,
createConstrainedHighSpeedCaptureSession(List, CameraCaptureSession.StateCallback, Handler) 将发送一个准备好使用信号到提供的监听器 onConfigured(CameraCaptureSession) 回调函数,如果配置没能完成,就调用 onConfigureFailed(CameraCaptureSession) ,会话不被激活。

如果新的会话被创建,之前的会话就被关闭,启用相关的 onClosed 回调。

Public methods
ReturnNameDescription
abstract List<CaptureRequest>createHighSpeedRequestList(CaptureRequest request)创建一个不可改变的请求列表

CameraDevice

你的应用必须在 manifest 中声明相机权限。
一个给定的相机可能支持两个级别中的一个:limited 或者 full。如果一个设备仅支持 limited 级别,那么 Camera2 包含粗略的相当于旧版 Camera API 的特性集合,但是有着更清晰更有效的接口。实现 full 级别支持的设备在较老的摄像头API上提供了大大改进的功能。针对 limited 级别设备的应用程序将在 full 级别设备上保持不变;如果您的应用程序需要一个 full 级别的设备来进行适当的操作,请在 manifest 中声明 “android.hardware.camera.level.full”。

常量
TypeNameDescription
intTEMPLATE_MANUAL一个基础模板用于直接应用控制捕获参数
intTEMPLATE_PREVIEW创建一个适合相机预览窗口的请求
intTEMPLATE_RECORD创建一个适合视频记录的请求
intTEMPLATE_STILL_CAPTURE创建一个适合静态图像捕获的请求
intTEMPLATE_VIDEO_SNAPSHOT创建一个适合记录视频时捕捉图像的请求
intTEMPLATE_ZERO_SHUTTER_LAG创建一个零快门滞后静态捕获请求
Public methods
TypeNameDescription
abstract voidclose()尽可能快的关闭这个相机连接
CaptureRequest.BuildercreateCaptureRequest(int templateType, Set<String> physicalCameraIdSet) 为新的捕获请求创建一个 CaptureRequest.Builder,用目标使用情况初始化模板 API P 及以上
abstract CaptureRequest.BuildercreateCaptureRequest(int templateType)为新的捕获请求创建一个 CaptureRequest.Builder,用目标使用情况初始化模板
voidcreateCaptureSession(SessionConfiguration config)用一个集合所有支持参数的 SessionConfiguration 对象创建一个新的 CameraCaptureSession。 Android P 及以上
abstract voidcreateCaptureSession(List<Surface> outputs, CameraCaptureSession.StateCallback callback, Handler handler)通过向相机设备提供一组目标输出表面创建一个新的捕获会话
abstract voidcreateCaptureSessionByOutputConfigurations(List<OutputConfiguration> outputConfigurations, CameraCaptureSession.StateCallback callback, Handler handler)通过向相机设备提供一组目标输出表面及其配置创建一个新的捕获会话
abstract void
createConstrainedHighSpeedCaptureSession(List<Surface> outputs, CameraCaptureSession.StateCallback callback, Handler handler)创建一个新的约束高速捕获会话
abstract CaptureRequest.BuildercreateReprocessCaptureRequest(TotalCaptureResult inputResult)从一个 TotalCaptureResult 为新的重新处理 CaptureRequest 创建一个 CaptureRequest.Builder
abstract voidcreateReprocessableCaptureSession(InputConfiguration inputConfig, List outputs, CameraCaptureSession.StateCallback callback, Handler handler)通过向相机设备提供需要的重处理输入表面配置和一组目标输出表面创建新的可重处理相机捕获会话
abstract voidcreateReprocessableCaptureSessionByConfigurations(InputConfiguration inputConfig, List outputs, CameraCaptureSession.StateCallback callback, Handler handler)通过向相机设备提供需要的重处理输入配置和输出 OutputConfiguration 创建新的可重处理相机捕获会话
abstract StringgetId()获取相机设备的 ID

CameraDevice.StateCallback

用于接收相机设备状态更新的回调,必须提供给 openCamera(String, CameraDevice.StateCallback, Handler) 方法来打开一个相机设备。

常量
TypeNameDescription
intERROR_CAMERA_DEVICE可以通过 onError(CameraDevice, int) 报告的一个错误码,指示相机设备遭遇致命错误
intERROR_CAMERA_DISABLED可以通过 onError(CameraDevice, int) 报告的一个错误码,指示由于设备策略无法打开相机设备
intERROR_CAMERA_IN_USE可以通过 onError(CameraDevice, int) 报告的一个错误码,指示相机设备已经在使用
intERROR_CAMERA_SERVICE可以通过 onError(CameraDevice, int) 报告的一个错误码,指示相机服务遭遇致命错误
intERROR_MAX_CAMERAS_IN_USE可以通过 onError(CameraDevice, int) 报告的一个错误码,指示由于有太多其他打开的相机设备该相机无法打开
Public methods
TypeNameDescription
voidonClosed(CameraDevice camera)当相机设备用 close() 关闭时调用
abstract voidonDisconnected(CameraDevice camera)当相机设备不再可以使用时调用
abstract voidonError(CameraDevice camera, int error)相机设备遭遇严重错误时调用
abstract voidonOpened(CameraDevice camera)相机设备打开完成时调用

CameraManager

一个系统服务管理用于检测,区分和连接到 CameraDevices。
必须通过传入 CameraManager.class 到 Context.getSystemService(Class) 或者传入 Context.CAMERA_SERVICE 到 Context.getSystemService(String) 获取这个类的实例。

Public methods
TypeNameDescription
CameraCharacteristicsgetCameraCharacteristics(String cameraId)查询相机设备能力
String[]getCameraIdList()通过标识符返回当前连接的摄像机设备列表,包括其他相机API客户端可能使用的摄像机。
voidopenCamera(String cameraId, CameraDevice.StateCallback callback, Handler handler)使用给定的 ID 打开连接一个相机
void openCamera(String cameraId, Executor executor, CameraDevice.StateCallback callback) 使用给定的 ID 打开连接一个相机 Android P 及以上
void registerAvailabilityCallback(Executor executor, CameraManager.AvailabilityCallback callback) 注册一个回调,相机可用时通知 Android P 及以上
voidregisterAvailabilityCallback(CameraManager.AvailabilityCallback callback, Handler handler)注册一个回调,相机可用时通知
voidregisterTorchCallback(CameraManager.TorchCallback callback, Handler handler)注册一个回调,通知相机 torch 模式状态
voidsetTorchMode(String cameraId, boolean enabled)设定给定 ID 相机 flash 单元的 torch 模式,不用打开相机设备
voidunregisterAvailabilityCallback(CameraManager.AvailabilityCallback callback)移除过去添加的回调,回调不在接收 torch 模式状态回调

CameraManager.AvailabilityCallback

当相机设备可以打开或不可打开时回调。

Public methods
TypeNameDescription
voidonCameraAvailable(String cameraId)新相机可用时调用
voidonCameraUnavailable(String cameraId)一个原本可用的相机不可用时调用

CameraManager.TorchCallback

当相机闪光灯 torch 模式变得 unavailable,disabled,enabled 时回调。
当拥有闪光灯的相机设备不可用或者需要的相机资源由于更要优先级的相机活动变得繁忙时 torch 模式变得 unavailable。当闪光灯关闭或者拥有它的相机设备不再使用和他需要的相机资源不再繁忙时 torch 模式变得 disabled。当应用调用 setTorchMode(String, boolean) 来关闭相机的 torch 模式时或者当同时保持多个 torch 不被支持,一个应用打开其他相机的 torch 模式,torch 模式关闭。当通过 setTorchMode(String, boolean) 打开时 torch 模式变得 enabled。
只有当 torch 模式是 disabled 或者 enabled 状态时,能通过 setTorchMode(String, boolean) 设置。

Public methods
TypeNameDescription
voidonTorchModeChanged(String cameraId, boolean enabled)相机的 torch 模式 enabled 或 disabled,可以通过 setTorchMode(String, boolean) 改变
voidonTorchModeUnavailable(String cameraId)相机的 torch 模式不能通过 setTorchMode(String, boolean) 设置

CameraMetadata

相机控制和信息的基类,定义了基础的键值对用于查询相机特性和捕获结果,以及设置相机请求参数。
所有 CameraMetadata 实例都是不可变的,getKeys() 返回的 keys 列表不会改变。

常量
TypeNameDescription
intCOLOR_CORRECTION_ABERRATION_MODE_FAST像差校正不会减慢捕获率相对于传感器的原始输出
intCOLOR_CORRECTION_ABERRATION_MODE_HIGH_QUALITY像差校正工作的质量提高,但捕获率可能降低(相对于传感器的原始输出率)
intCOLOR_CORRECTION_ABERRATION_MODE_OFF不使用像差校正
intCOLOR_CORRECTION_MODE_FAST颜色校正必须不会减慢捕获率相对于传感器的原始输出
intCOLOR_CORRECTION_MODE_HIGH_QUALITY提高颜色矫正质量,捕获率可能会降低(相对于传感器原始输出速率)
intCOLOR_CORRECTION_MODE_TRANSFORM_MATRIX使用 android.colorCorrection.transform 矩阵和 android.colorCorrection.gains 做颜色转换
intCONTROL_AE_ANTIBANDING_MODE_50HZ相机设备将调整曝光周期来避免 50Hz 光源的 banding 问题
intCONTROL_AE_ANTIBANDING_MODE_60HZ相机设备将调整曝光周期来避免 60Hz 光源的 banding 问题
intCONTROL_AE_ANTIBANDING_MODE_AUTO相机设备将自动调整 antibanding 程序以适应当前照明条件
intCONTROL_AE_ANTIBANDING_MODE_OFF相机设备不会调整曝光时长来避免 banding 问题
intCONTROL_AE_MODE_OFF相机设备自动曝光关闭
intCONTROL_AE_MODE_ON相机设备自动曝光激活,没有 flash 控制
intCONTROL_AE_MODE_ON_ALWAYS_FLASH同上,只是相机设备还控制闪光灯,拍照时总是闪光
intCONTROL_AE_MODE_ON_AUTO_FLASH同上,只是相机设备控制闪光灯在低光条件下开启
intCONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE自动闪光,自动红眼消除
intCONTROL_AE_MODE_ON_EXTERNAL_FLASH点亮外部闪光灯
intCONTROL_AE_PRECAPTURE_TRIGGER_CANCEL相机设备将取消任何当前的活动或完成预捕捉测量序列,自动曝光将回到初始状态
intCONTROL_AE_PRECAPTURE_TRIGGER_IDLE触发器是空闲的
intCONTROL_AE_PRECAPTURE_TRIGGER_START预捕捉测量序列将被相机设备开始
intCONTROL_AE_STATE_CONVERGEDAE 对当前的场景有一个好的控制值
intCONTROL_AE_STATE_FLASH_REQUIREDAE 有一个好的控制值,但是闪光灯需要被点亮
intCONTROL_AE_STATE_INACTIVEAE 关闭或者暂时复位
intCONTROL_AE_STATE_LOCKEDAE 被锁定
intCONTROL_AE_STATE_PRECAPTUREAE 被要求做预捕获序列并且现在正在做
intCONTROL_AE_STATE_SEARCHINGAE 对当前场景没有好的控制值
intCONTROL_AF_MODE_AUTO基础的自动对焦模式
intCONTROL_AF_MODE_CONTINUOUS_PICTURE在这种模式下,AF算法不断地修改镜头位置,试图提供一个恒定的焦点图像流
intCONTROL_AF_MODE_CONTINUOUS_VIDEO在这种模式下,AF算法不断地修改镜头位置,试图提供一个恒定的焦点图像流
intCONTROL_AF_MODE_EDOF扩展景深(数字聚焦)模式
intCONTROL_AF_MODE_MACRO特写镜头聚焦(微距)模式
intCONTROL_AF_MODE_OFF自动对焦不控制焦距, android.lens.focusDistance 被应用控制
intCONTROL_AF_SCENE_CHANGE_DETECTED自动对焦区域检测到场景改变
intCONTROL_AF_SCENE_CHANGE_NOT_DETECTED自动对焦区域没有检测到场景改变
intCONTROL_AF_STATE_ACTIVE_SCANAF 开始 AF 扫描,因为他被 AF trigger 触发
intCONTROL_AF_STATE_FOCUSED_LOCKED自动对焦相信对焦正确并且锁定
intCONTROL_AF_STATE_INACTIVEAF 关闭或者还没开始扫描
intCONTROL_AF_STATE_NOT_FOCUSED_LOCKEDAF 对焦失败且锁定
intCONTROL_AF_STATE_PASSIVE_FOCUSEDAF 相信当前对焦,但是随时准备重新扫描
intCONTROL_AF_STATE_PASSIVE_SCANAF 目前正在执行AF 扫描启动的相机设备在一个连续的自动对焦模式。
intCONTROL_AF_STATE_PASSIVE_UNFOCUSEDAF完成了被动扫描,没有找到焦点,可以随时重新开始扫描
intCONTROL_AF_TRIGGER_CANCEL自动对焦将返回到它的初始状态,并取消任何当前激活的触发器
intCONTROL_AF_TRIGGER_IDLE触发器闲置
intCONTROL_AF_TRIGGER_START自动对焦现在触发
intCONTROL_AWB_MODE_AUTO相机设备自动白平衡程序激活
intCONTROL_AWB_MODE_CLOUDY_DAYLIGHT相机设备自动白平衡程序关闭,相机设备使用多云的白天光线作为假定的白平衡光源
intCONTROL_AWB_MODE_DAYLIGHT相机设备自动白平衡程序关闭,相机设备使用日光光线作为假定的白平衡光源
intCONTROL_AWB_MODE_FLUORESCENT相机设备自动白平衡程序关闭,相机设备使用荧光光线作为假定的白平衡光源
intCONTROL_AWB_MODE_INCANDESCENT相机设备自动白平衡程序关闭,相机设备使用白炽灯光线作为假定的白平衡光源
intCONTROL_AWB_MODE_OFF自动白平衡关闭
intCONTROL_AWB_MODE_SHADE相机设备自动白平衡程序关闭,相机设备使用阴影光线作为假定的白平衡光源
intCONTROL_AWB_MODE_TWILIGHT相机设备自动白平衡程序关闭,相机设备使用黄昏光线作为假定的白平衡光源
intCONTROL_AWB_MODE_WARM_FLUORESCENT相机设备自动白平衡程序关闭,相机设备使用温暖荧光光线作为假定的白平衡光源
intCONTROL_AWB_STATE_CONVERGEDAWB 对当前场景友好的控制值
intCONTROL_AWB_STATE_INACTIVEAWB 不在自动模式,或者还没开始测量
intCONTROL_AWB_STATE_LOCKEDAWB 已经被锁定
intCONTROL_AWB_STATE_SEARCHINGAWB 对当前场景没有好的控制值
intCONTROL_CAPTURE_INTENT_CUSTOM此请求的目标不属于其他类别
intCONTROL_CAPTURE_INTENT_MANUAL此请求用于手动捕获,应用程序希望直接控制捕获参数
intCONTROL_CAPTURE_INTENT_MOTION_TRACKING这个请求是针对一个运动跟踪用例,应用程序将使用相机和惯性传感器数据来定位和跟踪物体
intCONTROL_CAPTURE_INTENT_PREVIEW这个请求用于预览类的请求
intCONTROL_CAPTURE_INTENT_STILL_CAPTURE这个请求用于拍照类的请求
intCONTROL_CAPTURE_INTENT_VIDEO_RECORD这个请求用于拍摄视频类的请求
intCONTROL_CAPTURE_INTENT_VIDEO_SNAPSHOT这个请求用于视频快照(录制视频时的静态图像)用例
intCONTROL_CAPTURE_INTENT_ZERO_SHUTTER_LAG此请求用于 ZSL 用例;应用程序将对全分辨率图像进行流处理,然后重新处理一个或多个图像,以便最终捕获
intCONTROL_EFFECT_MODE_AQUA图像中加入蓝色色调的“aqua”效果
intCONTROL_EFFECT_MODE_BLACKBOARD一种“黑板”效果,图像通常显示为黑色区域,带有白色或灰色的细节
intCONTROL_EFFECT_MODE_MONO一种“单色”效果,将图像映射为单一颜色
intCONTROL_EFFECT_MODE_NEGATIVE一种“负片”效果,图像的颜色是倒过来的
intCONTROL_EFFECT_MODE_OFF不使用颜色效果
intCONTROL_EFFECT_MODE_POSTERIZE一种“色调分离”的效果,即图像使用的是离散的色调区域而不是连续的色调梯度
intCONTROL_EFFECT_MODE_SEPIA一种“深褐色”效果,图像被映射成温暖的灰色、红色和棕色色调
intCONTROL_EFFECT_MODE_SOLARIZE一种“日晒”效应(萨巴蒂尔效应),图像的色调完全或部分颠倒
intCONTROL_EFFECT_MODE_WHITEBOARD一种“白板”效果,图像通常显示为白色区域,带有黑色或灰色的细节
intCONTROL_MODE_AUTO为每个 3A 算法使用设置
intCONTROL_MODE_OFFAPP 控制整个 pipeline
intCONTROL_MODE_OFF_KEEP_STATE同上,但是这个捕获不会被相机设备背景自动曝光,自动白平衡和自动聚焦算法(3A)用来更新他们的统计数据
intCONTROL_MODE_USE_SCENE_MODE使用特殊的场景模式
intCONTROL_SCENE_MODE_ACTION为快速移动对象的照片优化
intCONTROL_SCENE_MODE_BARCODE为准确捕捉条码照片而优化,以便希望读取条码值的相机应用程序使用
intCONTROL_SCENE_MODE_BEACH特别适合明亮的户外沙滩环境
intCONTROL_SCENE_MODE_CANDLELIGHT优化黑暗情况,其主要光源是火焰。
intCONTROL_SCENE_MODE_DISABLED指示没有为给定的捕获请求设置场景模式
intCONTROL_SCENE_MODE_FACE_PRIORITY如果有人脸检测支持,使用人脸检测数据进行自动对焦、自动白平衡和自动曝光
intCONTROL_SCENE_MODE_FIREWORKS为夜间的烟火照片优化
intCONTROL_SCENE_MODE_HDR打开设备特定的高动态范围(HDR)模式
intCONTROL_SCENE_MODE_HIGH_SPEED_VIDEOAPI 23 弃用
intCONTROL_SCENE_MODE_LANDSCAPE为远观小物体的照片优化
intCONTROL_SCENE_MODE_NIGHT优化低光设置
intCONTROL_SCENE_MODE_NIGHT_PORTRAIT为低光环境下的人的静态照片优化
intCONTROL_SCENE_MODE_PARTY为室内昏暗环境的多个移动人物优化
intCONTROL_SCENE_MODE_PORTRAIT为静态人物优化
intCONTROL_SCENE_MODE_SNOW优化光亮情况,室外包含雪的设置
intCONTROL_SCENE_MODE_SPORTS为快速移动人物优化
intCONTROL_SCENE_MODE_STEADYPHOTO优化避免小的设备移动引起的模糊
intCONTROL_SCENE_MODE_SUNSET日落场景优化
intCONTROL_SCENE_MODE_THEATRE昏暗室内不能开闪光灯情况的优化
intCONTROL_VIDEO_STABILIZATION_MODE_OFF视频增稳模式关闭
intCONTROL_VIDEO_STABILIZATION_MODE_ON视频增稳开启
intDISTORTION_CORRECTION_MODE_FAST采用镜头失真校正,不降低帧率相对于传感器输出
intDISTORTION_CORRECTION_MODE_HIGH_QUALITY采用高质量的畸变校正,其代价可能是相对于传感器输出的帧率降低
intDISTORTION_CORRECTION_MODE_OFF不应用畸变矫正
intEDGE_MODE_FAST在质量级别上应用边缘增强,不会降低相对于传感器输出的帧速率
intEDGE_MODE_HIGH_QUALITY采用高质量的边缘增强,以降低输出帧率为代价
intEDGE_MODE_OFF不应用边缘增强
intEDGE_MODE_ZERO_SHUTTER_LAG基于分辨率,边缘增强可应用于不同级别的不同输出流
intFLASH_MODE_OFF这次捕获不使用闪光灯
intFLASH_MODE_SINGLE如果闪光灯可用并有电,则为该捕获启动闪光灯
intFLASH_MODE_TORCH转换闪光到连续点亮
intFLASH_STATE_CHARGING闪光灯正在重点,不能点亮
intFLASH_STATE_FIRED闪光灯已经点亮
intFLASH_STATE_PARTIALFlash partially illuminated this frame
intFLASH_STATE_READY闪光灯准备好被点亮
intFLASH_STATE_UNAVAILABLE相机没有闪光灯
intHOT_PIXEL_MODE_FAST采用热点校正,不降低帧率相对于传感器的原始输出
intHOT_PIXEL_MODE_HIGH_QUALITY采用高质量的热点校正,代价是相对于传感器的原始输出可能降低帧率
intHOT_PIXEL_MODE_OFF热点校正关闭
intINFO_SUPPORTED_HARDWARE_LEVEL_3该相机设备除了具有全层功能外,还可以进行YUV的再处理和原始数据捕获
intINFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL这个摄像头设备由一个连接到这个Android设备的外部摄像头支持
intINFO_SUPPORTED_HARDWARE_LEVEL_FULL该摄像装置能够支持先进的成像应用
intINFO_SUPPORTED_HARDWARE_LEVEL_LEGACY这台相机正在向后兼容模式下运行
intINFO_SUPPORTED_HARDWARE_LEVEL_LIMITED这个相机设备没有足够的能力来作为一个FULL级别或更好的设备
intLENS_FACING_BACK摄像头设备朝向与屏幕相反的方向
intLENS_FACING_EXTERNAL外部摄像头与屏幕方向不确定
intLENS_FACING_FRONT摄像头朝向与屏幕相同
intLENS_INFO_FOCUS_DISTANCE_CALIBRATION_APPROXIMATE镜头聚焦距离用屈光度测量
intLENS_INFO_FOCUS_DISTANCE_CALIBRATION_CALIBRATED镜头聚焦距离用屈光度测量,并且已经标定
intLENS_INFO_FOCUS_DISTANCE_CALIBRATION_UNCALIBRATED镜头焦距不准确,使用的单位为android.lens。焦点距离不对应任何物理单位
intLENS_OPTICAL_STABILIZATION_MODE_OFF光学增稳关闭
intLENS_OPTICAL_STABILIZATION_MODE_ON光学增稳开启
intLENS_POSE_REFERENCE_GYROSCOPEandroid.lens.poseTranslation的值是相对于设备主陀螺仪的位置
intLENS_POSE_REFERENCE_PRIMARY_CAMERAandroid.lens.poseTranslation的值是相对于与本相机朝向相同的最大的相机设备的光学中心
intLENS_STATE_MOVING一个或几个镜头参数正在改变
intLENS_STATE_STATIONARY镜头参数不在改变
intLOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_APPROXIMATE一个软件机制被用来在物理相机之间同步
intLOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_CALIBRATED相机设备支持硬件级的帧时间戳同步,物理流图像的时间戳准确地反映了它的开始曝光时间
intNOISE_REDUCTION_MODE_FAST在不降低相对于传感器输出的帧率的情况下,采用了降噪
intNOISE_REDUCTION_MODE_HIGH_QUALITY采用了高质量的降噪,代价是相对于传感器的输出可能降低帧率
intNOISE_REDUCTION_MODE_MINIMAL在不降低相对于传感器输出的帧率的情况下,应用了最小的噪声降低
intNOISE_REDUCTION_MODE_OFF不使用降噪
intNOISE_REDUCTION_MODE_ZERO_SHUTTER_LAG根据分辨率,不同的输出流采用不同的降噪方法
intREQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE每个相机设备都支持的最小功能集
intREQUEST_AVAILABLE_CAPABILITIES_BURST_CAPTURE该相机设备支持在>= 20帧/秒拍摄高分辨率图像,至少在未压缩的YUV格式下,当后处理设置设置为FAST
intREQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO该设备支持受约束的高速视频记录(帧速率>=120fps)用例
intREQUEST_AVAILABLE_CAPABILITIES_DEPTH_OUTPUT照相设备可以从它的视场测量深度
intREQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA相机设备是由两个或两个以上的物理相机支持的逻辑相机
intREQUEST_AVAILABLE_CAPABILITIES_MANUAL_POST_PROCESSING相机设备的后处理阶段可以手动控制
intREQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR相机设备可以手动控制(3A算法,如自动曝光,自动对焦可以绕过)
intREQUEST_AVAILABLE_CAPABILITIES_MONOCHROME相机设备是一个单色相机,不包含彩色滤色阵列,U和Y平面上的像素值都是128
intREQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING相机对android.control.captureIntent支持的MOTION_TRACKING值,限制最大曝光时间为20ms
intREQUEST_AVAILABLE_CAPABILITIES_PRIVATE_REPROCESSING相机设备支持零快门延迟再处理用例
intREQUEST_AVAILABLE_CAPABILITIES_RAW摄像头设备支持输出原始缓冲区和解释它们的元数据
intREQUEST_AVAILABLE_CAPABILITIES_READ_SENSOR_SETTINGS当内置的3A算法在运行时,相机设备支持精确地报告传感器的设置
intREQUEST_AVAILABLE_CAPABILITIES_YUV_REPROCESSING相机设备支持YUV_420_888重处理用例,类似于PRIVATE_REPROCESSING,该功能需要相机设备支持以下内容:One input stream is supported, that is, android.request.maxNumInputStreams == 1.
intSCALER_CROPPING_TYPE_CENTER_ONLY摄像头设备只支持中央裁减区域
intSCALER_CROPPING_TYPE_FREEFORM摄像头设备支持任意选择的的裁减区域
intSENSOR_INFO_COLOR_FILTER_ARRANGEMENT_BGGR
intSENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GBRG
intSENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GRBG
intSENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGB传感器不是拜尔滤色镜,每个像素有三个16bit值,而不是一位16bit值
intSENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGGB
intSENSOR_INFO_TIMESTAMP_SOURCE_REALTIME从android.sensor.timestamp得到的时间戳与elapsedRealtimeNanos()具有相同的时间基,可与具有相同时间基的时间戳相比较
intSENSOR_INFO_TIMESTAMP_SOURCE_UNKNOWN从android.sensor.timestamp得到的时间戳。以纳秒为单位,并且是单调的,但是不能与其他子系统的时间戳相比较
intSENSOR_REFERENCE_ILLUMINANT1_CLOUDY_WEATHER
intSENSOR_REFERENCE_ILLUMINANT1_COOL_WHITE_FLUORESCENTW 3900 - 4500K
intSENSOR_REFERENCE_ILLUMINANT1_D50
intSENSOR_REFERENCE_ILLUMINANT1_D55
intSENSOR_REFERENCE_ILLUMINANT1_D65
intSENSOR_REFERENCE_ILLUMINANT1_D75
intSENSOR_REFERENCE_ILLUMINANT1_DAYLIGHT
intSENSOR_REFERENCE_ILLUMINANT1_DAYLIGHT_FLUORESCENTD 5700 - 7100K
intSENSOR_REFERENCE_ILLUMINANT1_DAY_WHITE_FLUORESCENTN 4600 - 5400K
intSENSOR_REFERENCE_ILLUMINANT1_FINE_WEATHER
intSENSOR_REFERENCE_ILLUMINANT1_FLASH
intSENSOR_REFERENCE_ILLUMINANT1_FLUORESCENT
intSENSOR_REFERENCE_ILLUMINANT1_ISO_STUDIO_TUNGSTEN
intSENSOR_REFERENCE_ILLUMINANT1_SHADE
intSENSOR_REFERENCE_ILLUMINANT1_STANDARD_A
intSENSOR_REFERENCE_ILLUMINANT1_STANDARD_B
intSENSOR_REFERENCE_ILLUMINANT1_STANDARD_C
intSENSOR_REFERENCE_ILLUMINANT1_TUNGSTEN白炽灯
intSENSOR_REFERENCE_ILLUMINANT1_WHITE_FLUORESCENTWW 3200 - 3700K
intSENSOR_TEST_PATTERN_MODE_COLOR_BARS
int所有的像素数据都被一个8-bar的彩色图案所取代SENSOR_TEST_PATTERN_MODE_COLOR_BARS_FADE_TO_GRAY测试模式与COLOR_BARS类似,不同的是,每个bar应该从顶部指定的颜色开始,然后在底部逐渐变为灰色
intSENSOR_TEST_PATTERN_MODE_CUSTOM1第一个自定义测试模式
intSENSOR_TEST_PATTERN_MODE_OFF不使用测试模式,相机设备返回来自图像传感器的捕获
intSENSOR_TEST_PATTERN_MODE_PN9所有像素数据都被由PN9 512位序列生成的伪随机序列所取代(通常在硬件中使用线性反馈移位寄存器实现)。
intSENSOR_TEST_PATTERN_MODE_SOLID_COLOR[R, G_even, G_odd, B]中的每个像素都被其各自的android.sensor.testPatternData中提供的颜色通道所替代
intSHADING_MODE_FAST应用镜头阴影校正,不减慢帧率相对于传感器原始输出
intSHADING_MODE_HIGH_QUALITY采用高质量的镜片阴影校正,可能会降低帧率
intSHADING_MODE_OFF不使用镜头阴影校正
intSTATISTICS_FACE_DETECT_MODE_FULL返回所有人脸元数据
intSTATISTICS_FACE_DETECT_MODE_OFF在捕获结果中不包含人脸检测统计信息
intSTATISTICS_FACE_DETECT_MODE_SIMPLE只返回人脸矩形和置信值
intSTATISTICS_LENS_SHADING_MAP_MODE_OFF在捕获结果中不包含镜头阴影图
intSTATISTICS_LENS_SHADING_MAP_MODE_ON在捕获结果中包括一个镜头阴影图
intSTATISTICS_OIS_DATA_MODE_OFF捕获结果中不包含 OIS 数据
intSTATISTICS_OIS_DATA_MODE_ON在捕获结果中包含OIS数据
intSTATISTICS_SCENE_FLICKER_50HZ摄像头设备检测到当前场景中50Hz的照明闪烁
intSTATISTICS_SCENE_FLICKER_60HZ摄像头设备检测到当前场景中60Hz的照明闪烁
intSTATISTICS_SCENE_FLICKER_NONE摄像头设备没有检测到当前场景中照明闪烁
intSYNC_MAX_LATENCY_PER_FRAME_CONTROL每一帧都有立即应用的请求
intSYNC_MAX_LATENCY_UNKNOWN每个新帧都有一些应用于过去相机设置的请求的子集(可能是整个集合)
intTONEMAP_MODE_CONTRAST_CURVE使用android.tonemap中指定的色调映射曲线
intTONEMAP_MODE_FAST高级的伽马映射和颜色增强可能应用,不降低帧率相比原始传感器的输出
intTONEMAP_MODE_GAMMA_VALUE使用android.tonemap中指定的伽马值进行色调映射
intTONEMAP_MODE_HIGH_QUALITY将采用高质量的伽玛映射和色彩增强,代价是与原始传感器输出相比可能降低帧率
intTONEMAP_MODE_PRESET_CURVE使用在android.tonemap.presetCurve中指定的预设置的tonemapping曲线进行色调映射
intTONEMAP_PRESET_CURVE_REC709Tonemapping曲线由ITU-R BT.709定义
intTONEMAP_PRESET_CURVE_SRGBTonemapping曲线由sRGB定义

CaptureFailure

来自图像传感器的单个图像捕获失败报告。

如果处理CaptureRequest失败(部分失败或全部失败),则由CameraDevice 生成capturefailure。使用getReason()来确定捕获失败的特性。

接收到CaptureFailure意味着与该帧号关联的元数据被删除——不会产生具有相同帧号的CaptureResult。

常量
TypeNameDescription
intREASON_ERROR由于框架中的错误,该帧的CaptureResult 已经被删除
intREASON_FLUSHED由于应用调用abortCaptures(),捕获失败
Public methods
ReturnTypeNameDescription
longgetFrameNumber()获取与此失败捕获相关联的帧号
intgetReason()确定请求被删除的原因,无论是由于错误还是用户操作
CaptureRequestgetRequest()获取与此失败捕获相关联的请求
intgetSequenceId()取与此失败捕获相关联的序列ID
booleanwasImageCaptured()确定图像是否从摄像机中捕获

CaptureRequest

从相机设备捕获单个图像所需的一组不变的设置和输出。

包含捕获硬件(传感器、镜头、闪存)、处理pipeline、控制算法和输出缓冲区的配置。还包含要将图像数据发送到此捕获的目标表面的列表。

CaptureRequests可以通过使用CaptureRequest.Builder 实例来创建,通过调用createCaptureRequest(int)获得。

将CaptureRequests传给 capture(CaptureRequest, CameraCaptureSession.CaptureCallback, Handler) 或者 setRepeatingRequest(CaptureRequest, CameraCaptureSession.CaptureCallback, Handler)来从一个相机捕获图像。

每个请求都可以为相机指定目标表面的不同子集,以便将捕获的数据发送给它。请求提交到会话时,请求中使用的所有表面必须是最后调用createCaptureSession(SessionConfiguration)的表面列表的一部分。

例如,用于重复预览的请求可能只包含用于预览的表面SurfaceView 或者 SurfaceTexture,而高分辨率的still capture也将包含为高分辨率JPEG图像配置的ImageReader的表面。

可重处理捕获请求允许一个过去相机捕获的图像送回设备做进一步处理。他可以通过createReprocessCaptureRequest(TotalCaptureResult)创建,并和createReprocessableCaptureSession(InputConfiguration, List, CameraCaptureSession.StateCallback, Handler)创建的重处理捕获会话一起使用。

Fields
TypeNameDescription
public static final Key<Boolean>BLACK_LEVEL_LOCKblack-level补偿是否锁定在当前值上,或者是否可以随意更改
public static finalKey<Integer>COLOR_CORRECTION_ABERRATION_MODE色差校正算法的运算模式
public static final Key<RggbChannelVector>COLOR_CORRECTION_GAINS用于白平衡的拜尔原始颜色通道的增益
public static final Key<Integer>COLOR_CORRECTION_MODE模式控制选择如何将图像数据从传感器的本地颜色转换为线性sRGB颜色
public static final Key<ColorSpaceTransform>COLOR_CORRECTION_TRANSFORM一个颜色变换矩阵用于从传感器RGB颜色空间转换为输出线性sRGB颜色空间
public static final Key<Integer>CONTROL_AE_ANTIBANDING_MODE相机设备的自动曝光算法的antibanding补偿的期望设置
public static final Key<Integer>CONTROL_AE_EXPOSURE_COMPENSATION调整自动曝光(AE)目标图像亮度
public static final Key<Boolean>CONTROL_AE_LOCK是否自动曝光(AE)目前锁定在其最新计算值
public static final Key<Integer>CONTROL_AE_MODE相机设备自动曝光的期望模式
public static final Key<Integer>CONTROL_AE_PRECAPTURE_TRIGGER相机设备在处理此请求时是否会触发预捕获测量序列
public static final Key<MeteringRectangle[]>CONTROL_AE_REGIONS用于调整自动曝光的计量区域的列表
public static final Key<Range<Integer>>CONTROL_AE_TARGET_FPS_RANGE自动曝光程序可以调整的帧率范围以保持良好曝光
public static final Key<Integer>CONTROL_AF_MODE是否当前启用自动对焦(AF),以及设置为什么模式
public static final Key<MeteringRectangle[]>CONTROL_AF_REGIONS自动对焦测量区域列表
public static final Key<Integer>CONTROL_AF_TRIGGER这次捕获相机设备是否触发自动对焦
public static final Key<Boolean>CONTROL_AWB_LOCK自动白平衡是否锁定在它最新计算值
public static final Key<Integer>CONTROL_AWB_MODE是否自动白平衡(AWB)正在设置颜色转换字段,以及它的光源目标是什么
public static final Key<MeteringRectangle[]>CONTROL_AWB_REGIONS用于自动白平衡光源估计的计量区域列的表
public static final Key<Integer>CONTROL_CAPTURE_INTENT帮助相机设备决定最优3A策略
public static final Key<Integer>CONTROL_EFFECT_MODE应用特殊的颜色效果
public static final Key<Boolean>CONTROL_ENABLE_ZSL允许相机使能 zero-shutter-lag 模式,android.control.captureIntent == STILL_CAPTURE
public static final Key<Integer>CONTROL_MODE3A(自动曝光,自动白平衡,自动对焦)控制程序的整体模式
public static final Key<Integer>CONTROL_POST_RAW_SENSITIVITY_BOOST在获取原始传感器数据后,应用于输出图像的附加灵敏度提升量
public static final Key<Integer>CONTROL_SCENE_MODE控制当前激活的场景模式
public static final Key<Integer>CONTROL_VIDEO_STABILIZATION_MODE视频增稳是否激活
public static final Creator<CaptureRequest>CREATOR
public static final Key<Integer>DISTORTION_CORRECTION_MODE镜头畸变校正块的操作模式
public static final Key<Integer>EDGE_MODE边缘增强的操作模式
public static final Key<Integer>FLASH_MODE相机设备闪光灯控制的期望模式
public static final Key<Integer>HOT_PIXEL_MODE热点校正操作模式
public static final Key<Location>JPEG_GPS_LOCATION在生成图像GPS元数据时要使用的位置对象
public static final Key<Integer>JPEG_ORIENTATIONJPEG图像的旋转
public static final Key<Byte>JPEG_QUALITY最终JPEG图像的压缩质量
public static final Key<Byte>JPEG_THUMBNAIL_QUALITYJPEG缩略图的压缩质量
public static final Key<Size>JPEG_THUMBNAIL_SIZE集成JPEG缩略图的分辨率
public static final Key<Float>LENS_APERTURE期望的镜头孔径尺寸,以透镜焦距与有效孔径的比值为标准
public static final Key<Float>LENS_FILTER_DENSITY期望的镜头中性密度过滤器设置
public static final Key<Float>LENS_FOCAL_LENGTH期望的镜头焦距;用于光学变焦
public static final Key<Float>LENS_FOCUS_DISTANCE从镜头最前部的表面测量到最尖锐焦点的平面的期望距离
public static final Key<Integer>LENS_OPTICAL_STABILIZATION_MODE设置相机设备在拍照时是否使用光学图像稳定(OIS)
public static final Key<Integer>NOISE_REDUCTION_MODE降噪算法的模式
public static final Key<Float>REPROCESS_EFFECTIVE_EXPOSURE_FACTOR曝光时间增加数量应用于原始输出帧
public static final Key<Rect>SCALER_CROP_REGION传感器捕获读出的期望区域
public static final Key<Long>SENSOR_EXPOSURE_TIME每个像素曝光时长
public static final Key<Long>SENSOR_FRAME_DURATION从帧曝光开始到下一帧曝光的持续时间
public static final Key<Integer>SENSOR_SENSITIVITY处理前应用于传感器数据的增益量
public static final Key<int[]>SENSOR_TEST_PATTERN_DATA一个像素[R, G_even, G_odd, B],当android.sensor.testPatternMode是SOLID_COLOR时提供测试图案
public static final Key<Integer>SENSOR_TEST_PATTERN_MODE当启用时,传感器会发送一个测试图案,而不是从摄像头进行真实曝光
public static final Key<Integer>SHADING_MODE镜头阴影校正质量
public static final Key<Integer>STATISTICS_FACE_DETECT_MODE人脸检测单元操作模式
public static final Key<Boolean>STATISTICS_HOT_PIXEL_MAP_MODE热点图生成操作模式
public static final Key<Integer>STATISTICS_LENS_SHADING_MAP_MODE相机设备是否在输出结果元数据中输出镜头阴影图
public static final Key<Integer>STATISTICS_OIS_DATA_MODE用于选择输出结果元数据中是否包含OIS位置信息的控件
public static final Key<TonemapCurve>TONEMAP_CURVE当android.tonemap.mode是CONTRAST_CURVE时,使用的色调映射/对比度/伽马曲线
public static final Key<Float>TONEMAP_GAMMA当android.tonemap.mode是GAMMA_VALUE使用的色调曲线
public static final Key<Integer>TONEMAP_MODE高级别全局对比度/伽马/色调映射控制
public static final Key<Integer>TONEMAP_PRESET_CURVE当android.tonemap.mode是PRESET_CURVE时使用的色调映射曲线
Public methods
ReturnTypeNameDescription
intdescribeContents()描述
booleanequals(Object other)判断相等
<T> Tget(Key<T> key)获取捕获请求字段值
List<Key<?>>getKeys()返回map中包含的关键字list
ObjectgetTag()检索此请求的标记(如果有的话)
inthashCode()返回对象的hash code值
booleanisReprocess()确定这是否是一个reprocess capture请求
voidwriteToParcel(Parcel dest, int flags)把这个东西压成一团

CaptureRequest.Builder

Public methods
ReturnTypeNameDescription
voidaddTarget(Surface outputTarget)为这个请求的目标列表添加一个Surface,Surface必须包含在当前调用createCaptureSession(SessionConfiguration)
CaptureRequestbuild()构建一个请求,使用当前的目标Surface和设置
<T> Tget(Key<T> key)获得一个捕获请求字段值
<T> TgetPhysicalCameraKey(Key<T> key, String physicalCameraId)从指定的物理相机获得一个捕获请求字段值
voidremoveTarget(Surface outputTarget)从此请求的目标列表中删除一个Surface
<T> voidset(Key<T> key, T value)设置捕获请求字段值
<T> CaptureRequest.BuildersetPhysicalCameraKey(Key<T> key, T value, String physicalCameraId)设置捕获请求字段值
voidsetTag(Object tag)设置这个请求的标签
;