一、簡介
CameraCharacteristics 是專門用來描述相機設備屬性的一個類,繼承自CameraMetadata類。給對給定的相機,它裏面所包含的屬性都是 固定的 ,也就是我們說的靜態metadata.
包括:曝光補償(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)等。
除了以上的這些,驅動也可以配置特定的KEY,我們可以通過定義一個
public static final CameraCharacteristics.Key<Integer> keyName =
new CameraCharacteristics.Key<Integer>("android.counstom.key", Integer.class);
// 獲取指定攝像頭的特性
CameraCharacteristics characteristics
= manager.getCameraCharacteristics(mCameraId);
// 獲取驅動自定義的配置屬性
int map = characteristics.get(keyName);
官方文檔鏈接: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的內部類,用做相機特性的字段查詢使用。
常搭配CameraCharacteristics.get(CameraCharacteristics.Key key)方法使用。
四、常用方法
-
T get(CameraCharacteristics.Key key)
獲取相機屬性中對應字段的值。如果輸入的 key 沒有設置,將返回 null。 -
List<CameraCharacteristics.Key<?>> getKeys()
獲取該相機設備支持的CameraCharacteristics.Key的列表。
該方法獲取的 Key 的列表,可以保證用作 CameraCharacteristics 類的 get() 方法時不會返回 null。
返回的 list 是不允許修改的,否則將拋出 UnsupportedOperationException 異常。 -
List<CaptureRequest.Key<?>> getAvailableCaptureRequestKeys()
獲取該相機設備支持的CaptureRequest.Key的列表。可用於 CaptureRequest 類的 get() 方法。 -
List<CaptureResult.Key<?>> getAvailableCaptureResultKeys()
獲取該相機設備支持的CaptureResult.Key的列表。可用於 CaptureResult 類的 get() 方法。
五、成員字段
以下就是一些通用的KEY值及詳解
類型 | 字段名 | 詳解 |
---|---|---|
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[]> | CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES | 相機設備支持的幀率範圍,用於 android.control.aeTargetFpsRange |
public static final Key<Range> | CONTROL_AE_COMPENSATION_RANGE | 相機設備支持的曝光補償範圍,用於 android.control.aeExposureCompensation |
public static final Key | CONTROL_AE_COMPENSATION_STEP | 曝光補償能夠改變的最小步長 |
public static final Key | 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 | CONTROL_AWB_LOCK_AVAILABLE | 相機設備是否支持 android.control.awbLock |
public static final Key | CONTROL_MAX_REGIONS_AE | 自動曝光可使用的最大測量區域數 |
public static final Key | CONTROL_MAX_REGIONS_AF | 自動聚焦可使用的最大測量區域數 |
public static final Key | CONTROL_MAX_REGIONS_AWB | 自動白平衡可使用的最大測量區域數 |
public static final Key<Range> | CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE | 相機設備支持的 boost 範圍,用於 android.control.postRawSensitivityBoost |
public static final Key | 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 | FLASH_INFO_AVAILABLE | 相機設備是否有閃光燈部件 |
public static final Key<int[]> | HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES | 相機設備支持的像素矯正模式列表,用於 android.hotPixel.mode |
public static final Key | INFO_SUPPORTED_HARDWARE_LEVEL | 相機設備支持的硬件等級 |
public static final Key | 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 | 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 | LENS_INFO_FOCUS_DISTANCE_CALIBRATION | 鏡頭焦距校準質量 |
public static final Key | LENS_INFO_HYPERFOCAL_DISTANCE | 鏡頭的超焦距 |
public static final Key | LENS_INFO_MINIMUM_FOCUS_DISTANCE | 能使鏡頭聚焦的最短距離 |
public static final Key<float[]> | LENS_INTRINSIC_CALIBRATION | 相機設備的內部標定參數(相機內參) |
public static final Key | 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 | LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE | 物理相機間幀時間戳同步的準確性,決定了物理相機同時開始曝光的能力 |
public static final Key<int[]> | NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES | 相機設備支持的降噪模式列表,用於 android.noiseReduction.mode |
public static final Key | REPROCESS_MAX_CAPTURE_STALL | 重處理捕獲請求時的最大失幀(以幀爲單位) |
public static final Key<int[]> | REQUEST_AVAILABLE_CAPABILITIES | 相機設備完全支持的功能列表 |
public static final Key | REQUEST_MAX_NUM_INPUT_STREAMS | 相機設備能夠同時支持的不同類型的輸入流最大數量 |
public static final Key | REQUEST_MAX_NUM_OUTPUT_PROC | 相機設備能夠同時支持的不同處理格式的輸出流最大數量(無停頓) |
public static final Key | REQUEST_MAX_NUM_OUTPUT_PROC_STALLING | 相機設備能夠同時支持的不同處理格式的輸出流最大數量(有停頓) |
public static final Key | REQUEST_MAX_NUM_OUTPUT_RAW | 對於任何 RAW 格式,相機設備能夠同時支持的不同類型的輸出流最大數量 |
public static final Key | REQUEST_PARTIAL_RESULT_COUNT | 定義一個結果將由多少個子結構組成 |
public static final Key | REQUEST_PIPELINE_MAX_DEPTH | 指定一個幀從暴露到可使用,所經過的管道階段數的最大值 |
public static final Key | SCALER_AVAILABLE_MAX_DIGITAL_ZOOM | active 區域寬高和裁剪區域寬度比值的最大值,用於 android.scaler.cropRegion |
public static final Key | SCALER_CROPPING_TYPE | 相機設備支持的裁剪類型,有 CENTER_ONLY 和 FREEFORM·兩種 |
public static final Key | SCALER_STREAM_CONFIGURATION_MAP | 相機設備支持的可用流的配置,包括最小幀間隔、不同格式、大小組合的失幀時長 |
public static final Key<int[]> | SENSOR_AVAILABLE_TEST_PATTERN_MODES | 相機設備支持的測試模式列表,用於 android.sensor.testPatternMode |
public static final Key | SENSOR_BLACK_LEVEL_PATTERN | 每個彩色濾光片排列(CFA)鑲嵌通道的固定黑色電平偏移量 |
public static final Key | SENSOR_CALIBRATION_TRANSFORM1 | 從參考傳感器顏色空間映射到實際設備傳感器顏色空間的每個設備校準轉換矩陣 |
public static final Key | SENSOR_CALIBRATION_TRANSFORM2 | 從參考傳感器顏色空間映射到實際設備傳感器顏色空間(這是原始緩衝區數據的顏色空間)的每個設備校準轉換矩陣 |
public static final Key | SENSOR_COLOR_TRANSFORM1 | 將顏色值從CIE XYZ顏色空間轉換爲參考傳感器顏色空間的矩陣 |
public static final Key | SENSOR_COLOR_TRANSFORM2 | 將顏色值從CIE XYZ顏色空間轉換爲參考傳感器顏色空間的矩陣 |
public static final Key | SENSOR_FORWARD_MATRIX1 | 一個矩陣,將白平衡攝像機顏色從參考傳感器顏色空間轉換爲帶有D50白點的CIE XYZ顏色空間 |
public static final Key | SENSOR_FORWARD_MATRIX2 | 一個矩陣,將白平衡攝像機顏色從參考傳感器顏色空間轉換爲帶有D50白點的CIE XYZ顏色空間 |
public static final Key |
SENSOR_INFO_ACTIVE_ARRAY_SIZE | 經過幾何畸變校正後,圖像傳感器對應於活動像素的面積 |
public static final Key | SENSOR_INFO_COLOR_FILTER_ARRANGEMENT | 傳感器上顏色濾波器的排列,按讀取順序,表示傳感器左上2x2部分的顏色 |
public static final Key<Range> | SENSOR_INFO_EXPOSURE_TIME_RANGE | 相機設備支持的圖片曝光時間範圍,用於 android.sensor.exposureTime |
public static final Key | SENSOR_INFO_LENS_SHADING_APPLIED | 相機設備輸出的原始圖像是否受鏡頭陰影校正影響 |
public static final Key | SENSOR_INFO_MAX_FRAME_DURATION | 相機設備支持的最大的幀間隔時間,用於 android.sensor.frameDuration |
public static final Key | SENSOR_INFO_PHYSICAL_SIZE | 完整像素數列的物理尺寸 |
public static final Key | SENSOR_INFO_PIXEL_ARRAY_SIZE | 完整像素數列的尺寸,可能包括黑色校準像素 |
public static final Key |
SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE | 在應用任何幾何畸變校正之前,與活動像素相對應的圖像傳感器的面積 |
public static final Key<Range> | SENSOR_INFO_SENSITIVITY_RANGE | 相機設備支持的敏感度範圍,用於 android.sensor.sensitivity |
public static final Key | SENSOR_INFO_TIMESTAMP_SOURCE | 傳感器開始捕捉的時間戳的時間基礎 |
public static final Key | SENSOR_INFO_WHITE_LEVEL | 傳感器最大的 raw 值輸出 |
public static final Key | SENSOR_MAX_ANALOG_SENSITIVITY | 純粹通過模擬增益實現的最大敏感度 |
public static final Key<Rect[]> | SENSOR_OPTICAL_BLACK_REGIONS | 表示傳感器光學屏蔽的黑色像素區域的不相交矩形列表 |
public static final Key | SENSOR_ORIENTATION | 使輸出圖像在設備屏幕上以本機方向垂直,順時針方向旋轉的角度 |
public static final Key | SENSOR_REFERENCE_ILLUMINANT1 | 當計算 android.sensor.colorTransform1, android.sensor.calibrationTransform1 和 android.sensor.forwardMatrix1 矩陣時,作爲場景光源的標準參考光源 |
public static final Key | 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 | 相機設備支持 |
public static final Key | STATISTICS_INFO_MAX_FACE_COUNT | 同時能夠檢測的人臉數的最大值 |
public static final Key | SYNC_MAX_LATENCY | 請求(與前一個請求不同)提交後以及結果狀態同步之前可能出現的最大幀數 |
public static final Key<int[]> | TONEMAP_AVAILABLE_TONE_MAP_MODES | 相機設備支持的圖像增強映射模式列表,用於 android.tonemap.mode |
public static final Key | TONEMAP_MAX_CURVE_POINTS | 圖像增強映射曲線支持的最大點的數量,用於 android.tonemap.curve |