本讲是Android Camera专题系列的第8讲,我们介绍Android Camera2 API专题的REQUEST_AVAILABLE_CAPABILITIES详解部分。
视频在线观看:
Camera Capability Overview
Camera支持的功能,可以通过如下代码获取当前Camera设备支持的功能列表
int [] capabilities = characteristics.get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES);
截止Android S,包括如下Capability:
- BACKWARD_COMPATIBLE
- MANUAL_SENSOR
- MANUAL_POST_PROCESSING
- RAW
- PRIVATE_REPROCESSING
- READ_SENSOR_SETTINGS
- BURST_CAPTURE
- YUV_REPROCESSING
- DEPTH_OUTPUTAL
- CONSTRAINED_HIGH_SPEED_VIDEO
- MOTION_TRACKING
- LOGICAL_MULTI_CAMERA
- MONOCHROME
- SECURE_IMAGE_DATA
- SYSTEM_CAMERA
- OFFLINE_PROCESSING
- ULTRA_HIGH_RESOLUTION_SENSOR
- REMOSAIC_REPROCESSING
BACKWARD_COMPATIBLE
Camera HAL1具备的能力,几乎所有设备都支持这种能力(拥有DEPTH_OUTPUT的设备可以是例外)
Depth output camera可以不支持该Capability
具备旧有API:android.hardware.Camera 的所有能力
MANUAL_SENSOR
在Sensor图像获取阶段的相关模块,要求支持手动控制
MANUAL_POST_PROCESSING
在Sensor图像后处理(ISP)阶段的相关模块,要求支持手动控制
READ_SENSOR_SETTINGS
表示当前设备支持在CaptureResult中能精确地回报Camera Sensor实际生效的参数
拥有 MANUAL_SENSOR Capability的Camera,必须包含 READ_SENSOR_SETTINGS
RAW
- 表示当前设备支持输出RAW图
-
可以将RAW图和相关Metadata打包成DNG文件保存,或者App通过算法直接出图RAW图
-
ImageFormat.RAW_SENSOR (RAW16) 必须支持
-
DNG是什么 https://deepinout.com/camera-terms/camera-what-is-dng-image.html
PRIVATE_REPROCESSING
-
该Feature主要用于应用层的ZSL(Zero Shutter Lag)功能
-
支持ImageFormat.PRIVATE
YUV_REPROCESSING
- 跟PRIVATE_REPROCESSING类似,表示当前设备支持YUV_420_888的再处理
BURST_CAPTURE
-
这种Capability对高分辨率拍照有如下要求
-
<=8MP, >=20fps, 且支持YUV Output
-
<=24MP, >=10fps
-
适用场景:连拍
DEPTH_OUTPUT
-
表示当前设备支持输出深度图像
-
必须支持ImageFormat.DEPTH16,且支持同宽高比的Jpeg图像输出
-
如果支持ImageFormat.DEPTH_JPEG(JPEG压缩主图像和XMP格式嵌入深度图)
-
DEPTH_IS_EXCLUSIVE必须为False,表示主图像和深度图可以同时输出
-
如果不支持ImageFormat.DEPTH_JPEG
-
DEPTH_IS_EXCLUSIVE必须为True,表示主图像和深度图可以不能同时输出
-
深度图像解释:https://deepinout.com/camera-terms/what-is-depth-image.html
CONSTRAINED_HIGH_SPEED_VIDEO
-
表面当前设备支持高帧率录像( frame rate >=120fps )
-
这种模式下AE、AWB强制设置为ON,AF强制设置为CONTINUOUS_VIDEO
-
POST-PROCESSING的模块强制设置为FAST模式
-
Session最多支持配置2个Surface(Preview + Recording)
MOTION_TRACKING
-
表示该设备支持跟踪运动物体
-
为了减少运动模糊,在这种Capability下AE会将曝光时间限制在<=20ms
LOGICAL_MULTI_CAMERA
-
表示这颗Camera对应多颗物理Camera
-
Hardware Level至少是LIMITED
MONOCHROME
- 表示该Camera设备是一个单色Camera设备
-
当输入YUV_420_888时,U和V的值均为128
-
单色摄像头可以用作Logical MultiCamera设备的某个Physical Camera,以获取更出色的低光噪音特性。
SECURE_IMAGE_DATA
-
表示该Camera设备可以产生只能TEE能访问的图像数据
-
Android 用户空间和Kernel都无法访问这块图像数据
-
可用于人脸解锁等场景
SYSTEM_CAMERA
-
表示这颗Camera设备只能被System App使用,对其他App不可见
-
只有安装在系统分区上且具有与系统相同的证书或使用该证书进行签名的应用才能获得此权限
-
App需要申请 android.permission.SYSTEM_CAMERA 和android.permission.CAMERA权限
-
如果设备制造商希望实现需要访问相机的功能,但这些功能仅限于特权应用或系统应用,该功能会非常有用
OFFLINE_PROCESSING
-
表示该Camera设备支持离线处理功能
-
在离线模式处理的过程中,App可以打开相机重新创建Session与Offline Session并发工作
-
适用场景:快拍
ULTRA_HIGH_RESOLUTION_SENSOR
-
表示该设备支持输出Sensor最大size的图像
-
Sensor工作在SENSOR_PIXEL_MODE_DEFAULT模式
- 输出Binning Size的图像
- Sensor工作在SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION模式
- 输出Full Size的图像
REMOSAIC_REPROCESSING
- 表示该设备支持Remosaic的再处理
-
该Capability需要ULTRA_HIGH_RESOLUTION_SENSOR同时支持才行
-
App完成SW Remosaic算法,将结果送给HAL再处理
-
Remosaic介绍
- https://deepinout.com/camera-terms/camera-remosaic-intro.html
- https://deepinout.com/camera-terms/camera-4-cell-remosaic-intro.html
Hardware Level与Capability的关系
所有Camera设备必须包含BACKWARD_COMPATIBLE或DEPTH_OUTPUT能力
判断某个Camera Feature是否支持
Feature | 如何判断是否支持 |
---|---|
FD | 读取CameraCharacteristics.STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES,是否包含SIMPLE或FULL模式 |
OIS | 读取android.lens.info.availableOpticalStabilization,是否包含ON |
EIS | 读取android.control.availableVideoStabilizationModes,是否包含ON |
AF | 读取android.control.afAvailableModes,是否包含AUTO / MACRO / CONTINUOUS_VIDEO / CONTINUOUS_PICTURE / EDOF |