一、简介
CameraCharacteristics 是描述相机设备的属性类,其中的属性都是 固定的,继承自 CameraMetadata
类。类比于旧 API 中的 CameraInfo
类。
包括:曝光补偿(Exposure compensation)、自动曝光/自动对焦/自动白平衡模式(AE / AF / AWB mode)、自动曝光/自动白平衡锁(AE / AWB lock)、自动对焦触发器(AF trigger)、拍摄前自动曝光触发器(Precapture AE trigger)、测量区域(Metering regions)、闪光灯触发器(Flash trigger)、曝光时间(Exposure time)、感光度(ISO Sensitivity)、帧间隔(Frame duration)、镜头对焦距离(Lens focus distance)、色彩校正矩阵(Color correction matrix)、JPEG 元数据(JPEG metadata)、色调映射曲线(Tonemap curve)、裁剪区域(Crop region)、目标 FPS 范围(Target FPS range)、拍摄意图(Capture intent)、硬件视频防抖(Video stabilization)等。
官方文档链接:https://developer.android.google.cn/reference/android/hardware/camera2/CameraCharacteristics
二、获取 CameraCharacteristics 示例
通过 CameraManager
的 getCameraCharacteristics(String cameraId)
方法获取指定相机设备的 CameraCharacteristics 对象。
private int mCameraId = CameraCharacteristics.LENS_FACING_FRONT; // 要打开的摄像头ID
private CameraManager mCameraManager; // 相机管理者
private CameraCharacteristics mCameraCharacteristics; // 相机属性public void openCamera() {try {mCameraCharacteristics = mCameraManager.getCameraCharacteristics(Integer.toString(mCameraId));StreamConfigurationMap map = mCameraCharacteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);// ...省略} catch (CameraAccessException e) {e.printStackTrace();}
}
三、内部类
包含一个 CameraCharacteristics.Key<T>
的内部类,用做相机特性的字段查询使用。
常搭配 CameraCharacteristics.get(CameraCharacteristics.Key<T> key)
方法使用。
四、常用方法
1. T get(CameraCharacteristics.Key key)
获取相机属性中对应字段的值。如果输入的 key 没有设置,将返回 null。
2. List<CameraCharacteristics.Key<?>> getKeys()
获取该相机设备支持的 CameraCharacteristics.Key
的列表。
该方法获取的 Key 的列表,可以保证用作 CameraCharacteristics 类的 get() 方法时不会返回 null。
返回的 list 是不允许修改的,否则将抛出 UnsupportedOperationException 异常。
3. List<CaptureRequest.Key<?>> getAvailableCaptureRequestKeys()
获取该相机设备支持的 CaptureRequest.Key
的列表。可用于 CaptureRequest 类的 get() 方法。
4. List<CaptureResult.Key<?>> getAvailableCaptureResultKeys()
获取该相机设备支持的 CaptureResult.Key
的列表。可用于 CaptureResult 类的 get() 方法。
五、成员字段
这个太多了,差不多就是翻译一下官方文档了,这里一些常用的我就加粗表示吧。
对于一些缩写,你应该也需要了解,例如 自动曝光 AE(auto exposure)、自动聚焦 AF(auto focus)、自动白平衡 AWB(auto white balance) 等。
类型 | 字段名 | 描述 |
---|---|---|
public static final Key<int[]> | COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES | 相机设备支持的像差校正模式列表,用于 android.colorCorrection.aberrationMode |
public static final Key<int[]> | CONTROL_AE_AVAILABLE_ANTIBANDING_MODES | 相机设备支持的自动曝光反冲带模式列表,用于 android.control.aeAntibandingMode |
public static final Key<int[]> | CONTROL_AE_AVAILABLE_MODES | 相机设备支持的自动曝光模式列表,用于 android.control.aeMode |
public static final Key<Range[]<Integer>> | CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES | 相机设备支持的帧率范围,用于 android.control.aeTargetFpsRange |
public static final Key<Range<Integer>> | CONTROL_AE_COMPENSATION_RANGE | 相机设备支持的曝光补偿范围,用于 android.control.aeExposureCompensation |
public static final Key<Rational> | CONTROL_AE_COMPENSATION_STEP | 曝光补偿能够改变的最小步长 |
public static final Key<Boolean> | CONTROL_AE_LOCK_AVAILABLE | 相机设备是否支持 android.control.aeLock |
public static final Key<int[]> | CONTROL_AF_AVAILABLE_MODES | 相机设备支持的自动聚焦模式列表,用于 android.control.afMode |
public static final Key<int[]> | CONTROL_AVAILABLE_EFFECTS | 相机设备支持的颜色效果列表,用于 android.control.effectMode |
public static final Key<int[]> | CONTROL_AVAILABLE_MODES | 相机设备支持的控制模式列表,用于 android.control.mode |
public static final Key<int[]> | CONTROL_AVAILABLE_SCENE_MODES | 相机设备支持的场景模式列表(如夜景、美食、烛光等),用于 android.control.sceneMode |
public static final Key<int[]> | CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES | 相机设备支持的视频稳定模式列表,用于 android.control.videoStabilizationMode |
public static final Key<int[]> | CONTROL_AWB_AVAILABLE_MODES | 相机设备支持的自动白平衡模式列表,用于 android.control.awbMode |
public static final Key<Boolean> | CONTROL_AWB_LOCK_AVAILABLE | 相机设备是否支持 android.control.awbLock |
public static final Key<Integer> | CONTROL_MAX_REGIONS_AE | 自动曝光可使用的最大测量区域数 |
public static final Key<Integer> | CONTROL_MAX_REGIONS_AF | 自动聚焦可使用的最大测量区域数 |
public static final Key<Integer> | CONTROL_MAX_REGIONS_AWB | 自动白平衡可使用的最大测量区域数 |
public static final Key<Range<Integer>> | CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE | 相机设备支持的 boost 范围,用于 android.control.postRawSensitivityBoost |
public static final Key<Boolean> | DEPTH_DEPTH_IS_EXCLUSIVE | 指出一个捕捉请求是否能够同时支持深度输出(如 DEPTH16 / DEPTH_POINT_CLOUD)和普通颜色输出(如 YUV_420_888, JPEG 或 RAW) |
public static final Key<int[]> | DISTORTION_CORRECTION_AVAILABLE_MODES | 相机设备支持的畸变矫正模式列表,用于 android.distortionCorrection.mode |
public static final Key<int[]> | EDGE_AVAILABLE_EDGE_MODES | 相机设备支持的边缘增强模式列表,用于 android.edge.mode |
public static final Key<Boolean> | FLASH_INFO_AVAILABLE | 相机设备是否有闪光灯部件 |
public static final Key<int[]> | HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES | 相机设备支持的像素矫正模式列表,用于 android.hotPixel.mode |
public static final Key<Integer> | INFO_SUPPORTED_HARDWARE_LEVEL | 相机设备支持的硬件等级 |
public static final Key<String> | INFO_VERSION | 关于相机设备的制造商版本信息,例如网络服务硬件、传感器等 |
public static final Key<Size[]> | JPEG_AVAILABLE_THUMBNAIL_SIZES | 相机设备支持的 JPEG 格式缩略图大小列表,用于 android.jpeg.thumbnailSize |
public static final Key<float[]> | LENS_DISTORTION | 矫正系数,以纠正相机设备的径向和切向的镜头畸变 |
public static final Key<Integer> | LENS_FACING | 相机设备相对于屏幕的方向,例如后置摄像头一般是 LENS_FACING_FRONT |
public static final Key<float[]> | LENS_INFO_AVAILABLE_APERTURES | 相机设备支持的光圈大小列表,用于 android.lens.aperture |
public static final Key<float[]> | LENS_INFO_AVAILABLE_FILTER_DENSITIES | 相机设备支持的中性密度滤波值列表,用于 android.lens.filterDensity |
public static final Key<float[]> | LENS_INFO_AVAILABLE_FOCAL_LENGTHS | 相机设备支持的焦距列表,用于 android.lens.focalLength |
public static final Key<int[]> | LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION | 相机设备支持的光学稳像(optical image stabilization,OIS)模式列表,用于 android.lens.opticalStabilizationMode |
public static final Key<Integer> | LENS_INFO_FOCUS_DISTANCE_CALIBRATION | 镜头焦距校准质量 |
public static final Key<Float> | LENS_INFO_HYPERFOCAL_DISTANCE | 镜头的超焦距 |
public static final Key<Float> | LENS_INFO_MINIMUM_FOCUS_DISTANCE | 能使镜头聚焦的最短距离 |
public static final Key<float[]> | LENS_INTRINSIC_CALIBRATION | 相机设备的内部标定参数(相机内参) |
public static final Key<Integer> | LENS_POSE_REFERENCE | 镜头的引用位置,即用于 android.lens.poseTranslation 的起始坐标 |
public static final Key<float[]> | LENS_POSE_ROTATION | 相机设备相对于传感器坐标系的方向 |
public static final Key<float[]> | LENS_POSE_TRANSLATION | 相机光学中心位置 |
public static final Key<float[]> | LENS_RADIAL_DISTORTION | 镜头径向畸变,在 Android 28 上已弃用,使用 android.lens.distortion 代替 |
public static final Key<Integer> | LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE | 物理相机间帧时间戳同步的准确性,决定了物理相机同时开始曝光的能力 |
public static final Key<int[]> | NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES | 相机设备支持的降噪模式列表,用于 android.noiseReduction.mode |
public static final Key<Integer> | REPROCESS_MAX_CAPTURE_STALL | 重处理捕获请求时的最大失帧(以帧为单位) |
public static final Key<int[]> | REQUEST_AVAILABLE_CAPABILITIES | 相机设备完全支持的功能列表 |
public static final Key<Integer> | REQUEST_MAX_NUM_INPUT_STREAMS | 相机设备能够同时支持的不同类型的输入流最大数量 |
public static final Key<Integer> | REQUEST_MAX_NUM_OUTPUT_PROC | 相机设备能够同时支持的不同处理格式的输出流最大数量(无停顿) |
public static final Key<Integer> | REQUEST_MAX_NUM_OUTPUT_PROC_STALLING | 相机设备能够同时支持的不同处理格式的输出流最大数量(有停顿) |
public static final Key<Integer> | REQUEST_MAX_NUM_OUTPUT_RAW | 对于任何 RAW 格式,相机设备能够同时支持的不同类型的输出流最大数量 |
public static final Key<Integer> | REQUEST_PARTIAL_RESULT_COUNT | 定义一个结果将由多少个子结构组成 |
public static final Key<Byte> | REQUEST_PIPELINE_MAX_DEPTH | 指定一个帧从暴露到可使用,所经过的管道阶段数的最大值 |
public static final Key<Float> | SCALER_AVAILABLE_MAX_DIGITAL_ZOOM | active 区域宽高和裁剪区域宽度比值的最大值,用于 android.scaler.cropRegion |
public static final Key<Integer> | SCALER_CROPPING_TYPE | 相机设备支持的裁剪类型,有 CENTER_ONLY 和 FREEFORM ·两种 |
public static final Key<StreamConfigurationMap> | SCALER_STREAM_CONFIGURATION_MAP | 相机设备支持的可用流的配置,包括最小帧间隔、不同格式、大小组合的失帧时长 |
public static final Key<int[]> | SENSOR_AVAILABLE_TEST_PATTERN_MODES | 相机设备支持的测试模式列表,用于 android.sensor.testPatternMode |
public static final Key<BlackLevelPattern> | SENSOR_BLACK_LEVEL_PATTERN | 每个彩色滤光片排列(CFA)镶嵌通道的固定黑色电平偏移量 |
public static final Key<ColorSpaceTransform> | SENSOR_CALIBRATION_TRANSFORM1 | 从参考传感器颜色空间映射到实际设备传感器颜色空间的每个设备校准转换矩阵 |
public static final Key<ColorSpaceTransform> | SENSOR_CALIBRATION_TRANSFORM2 | 从参考传感器颜色空间映射到实际设备传感器颜色空间(这是原始缓冲区数据的颜色空间)的每个设备校准转换矩阵 |
public static final Key<ColorSpaceTransform> | SENSOR_COLOR_TRANSFORM1 | 将颜色值从CIE XYZ颜色空间转换为参考传感器颜色空间的矩阵 |
public static final Key<ColorSpaceTransform> | SENSOR_COLOR_TRANSFORM2 | 将颜色值从CIE XYZ颜色空间转换为参考传感器颜色空间的矩阵 |
public static final Key<ColorSpaceTransform> | SENSOR_FORWARD_MATRIX1 | 一个矩阵,将白平衡摄像机颜色从参考传感器颜色空间转换为带有D50白点的CIE XYZ颜色空间 |
public static final Key<ColorSpaceTransform> | SENSOR_FORWARD_MATRIX2 | 一个矩阵,将白平衡摄像机颜色从参考传感器颜色空间转换为带有D50白点的CIE XYZ颜色空间 |
public static final Key<Rect> | SENSOR_INFO_ACTIVE_ARRAY_SIZE | 经过几何畸变校正后,图像传感器对应于活动像素的面积 |
public static final Key<Integer> | SENSOR_INFO_COLOR_FILTER_ARRANGEMENT | 传感器上颜色滤波器的排列,按读取顺序,表示传感器左上2x2部分的颜色 |
public static final Key<Range<Long>> | SENSOR_INFO_EXPOSURE_TIME_RANGE | 相机设备支持的图片曝光时间范围,用于 android.sensor.exposureTime |
public static final Key<Boolean> | SENSOR_INFO_LENS_SHADING_APPLIED | 相机设备输出的原始图像是否受镜头阴影校正影响 |
public static final Key<Long> | SENSOR_INFO_MAX_FRAME_DURATION | 相机设备支持的最大的帧间隔时间,用于 android.sensor.frameDuration |
public static final Key<SizeF> | SENSOR_INFO_PHYSICAL_SIZE | 完整像素数列的物理尺寸 |
public static final Key<Size> | SENSOR_INFO_PIXEL_ARRAY_SIZE | 完整像素数列的尺寸,可能包括黑色校准像素 |
public static final Key<Rect> | SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE | 在应用任何几何畸变校正之前,与活动像素相对应的图像传感器的面积 |
public static final Key<Range<Integer>> | SENSOR_INFO_SENSITIVITY_RANGE | 相机设备支持的敏感度范围,用于 android.sensor.sensitivity |
public static final Key<Integer> | SENSOR_INFO_TIMESTAMP_SOURCE | 传感器开始捕捉的时间戳的时间基础 |
public static final Key<Integer> | SENSOR_INFO_WHITE_LEVEL | 传感器最大的 raw 值输出 |
public static final Key<Integer> | SENSOR_MAX_ANALOG_SENSITIVITY | 纯粹通过模拟增益实现的最大敏感度 |
public static final Key<Rect[]> | SENSOR_OPTICAL_BLACK_REGIONS | 表示传感器光学屏蔽的黑色像素区域的不相交矩形列表 |
public static final Key<Integer> | SENSOR_ORIENTATION | 使输出图像在设备屏幕上以本机方向垂直,顺时针方向旋转的角度 |
public static final Key<Integer> | SENSOR_REFERENCE_ILLUMINANT1 | 当计算 android.sensor.colorTransform1, android.sensor.calibrationTransform1 和 android.sensor.forwardMatrix1 矩阵时,作为场景光源的标准参考光源 |
public static final Key<Byte> | SENSOR_REFERENCE_ILLUMINANT2 | 当计算 android.sensor.colorTransform2, android.sensor.calibrationTransform2 和 android.sensor.forwardMatrix2 矩阵时,作为场景光源的标准参考光源 |
public static final Key<int[]> | SHADING_AVAILABLE_MODES | 相机设备支持的镜头应用模式列表,用于 android.shading.mode |
public static final Key<int[]> | STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES | 相机设备支持的人脸检测模式列表,用于 android.statistics.faceDetectMode |
public static final Key<boolean[]> | STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES | 相机设备支持的热像素映射输出模式列表,用于 android.statistics.hotPixelMapMode |
public static final Key<int[]> | STATISTICS_INFO_AVAILABLE_LENS_SHADING_MAP_MODES | 相机设备支持的镜头阴影映射输出模式列表,用于 android.statistics.lensShadingMapMode |
public static final Key<int[]> | STATISTICS_INFO_AVAILABLE_OIS_DATA_MODES | 相机设备支持的 OIS 数据输出模式列表,用于 android.statistics.lensShadingMapMode |
public static final Key<Integer> | STATISTICS_INFO_MAX_FACE_COUNT | 同时能够检测的人脸数的最大值 |
public static final Key<Integer> | SYNC_MAX_LATENCY | 请求(与前一个请求不同)提交后以及结果状态同步之前可能出现的最大帧数 |
public static final Key<int[]> | TONEMAP_AVAILABLE_TONE_MAP_MODES | 相机设备支持的图像增强映射模式列表,用于 android.tonemap.mode |
public static final Key<Integer> | TONEMAP_MAX_CURVE_POINTS | 图像增强映射曲线支持的最大点的数量,用于 android.tonemap.curve |