1. 程式人生 > >Android Camera2 之 CameraCharacteristics 詳解

Android Camera2 之 CameraCharacteristics 詳解

一、簡介

CameraCharacteristics 是專門用來描述相機裝置屬性的一個類,繼承自 CameraMetadata 類。給對給定的相機,它裡面所包含的屬性都是 固定的

包括:曝光補償(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 示例

通過 CameraManagergetCameraCharacteristics(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_ONLYFREEFORM·兩種
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