2024年10月27日 第49讲 Android13 Camera2 New APIs介绍 极客笔记
本讲是Android Camera专题系列的第49讲,我们介绍Android 13 Camera2 New APIs。
更多资源:
资源 | 描述 |
---|---|
在线课程 | 极客笔记在线课程 |
知识星球 | 星球名称:深入浅出Android Camera 星球ID: 17296815 |
极客笔记圈 |
针对汽车场景,新增了两个静态属性来描述车载上的摄像头:LENS FACING和LOCATION。
CameraCharacteristics | 解释 |
---|---|
AUTOMOTIVE_LENS_FACING | 车载摄像头朝向,支持如下值: AUTOMOTIVE_LENS_FACING_EXTERIOR_FRONT AUTOMOTIVE_LENS_FACING_EXTERIOR_LEFT AUTOMOTIVE_LENS_FACING_EXTERIOR_OTHER AUTOMOTIVE_LENS_FACING_EXTERIOR_REAR AUTOMOTIVE_LENS_FACING_EXTERIOR_RIGHT AUTOMOTIVE_LENS_FACING_INTERIOR_OTHER AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_1_CENTER AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_1_LEFT AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_1_RIGHT AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_2_CENTER AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_2_LEFT AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_2_RIGHT AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_3_CENTER AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_3_LEFT AUTOMOTIVE_LENS_FACING_INTERIOR_SEAT_ROW_3_RIGHT |
AUTOMOTIVE_LOCATION | 车载摄像头位置,支持如下值: AUTOMOTIVE_LOCATION_EXTERIOR_FRONT AUTOMOTIVE_LOCATION_EXTERIOR_LEFT AUTOMOTIVE_LOCATION_EXTERIOR_OTHER AUTOMOTIVE_LOCATION_EXTERIOR_REAR AUTOMOTIVE_LOCATION_EXTERIOR_RIGHT AUTOMOTIVE_LOCATION_EXTRA_FRONT AUTOMOTIVE_LOCATION_EXTRA_LEFT AUTOMOTIVE_LOCATION_EXTRA_OTHER AUTOMOTIVE_LOCATION_EXTRA_REAR AUTOMOTIVE_LOCATION_EXTRA_RIGHT AUTOMOTIVE_LOCATION_INTERIOR |
Android定义的汽车坐标轴如下图所示:
在这个坐标系中,车身框架的每一侧定义如下
为什么要新增Torch Flash可调整strength功能?
判断是否支持
CameraCharacteristics | Description |
---|---|
FLASH_INFO_STRENGTH_MAXIMUM_LEVEL | 大于1表示支持控制strength 等于1表示不支持控制strength |
FLASH_INFO_STRENGTH_DEFAULT_LEVEL | 推荐使用的torch flash strength level 大于这个值可能会引发thermal,对功耗有影响 |
控制方式
CameraManager | Description |
---|---|
void turnOnTorchWithStrengthLevel(String, int) |
调整Torch flash 的strength level |
int getTorchStrengthLevel(String) |
获取当前使用的strength level |
状态回调
CameraManager.TorchCallback | Description |
---|---|
void onTorchStrengthLevelChanged(String, int) |
Torch flash的strength level发生改变后,会通过该方法回调给App |
关于OutputConfiguration的介绍请参阅:14.Android Camera2 API OutputConfiguration API详解
为什么要新增Mirror功能?
如何设置/获取Mirror:
OutputConfiguration | Description |
---|---|
void setMirrorMode(int) int getMirrorMode() |
设置/获取该OutputConfiguration的Mirror mode 可设置的值如下: 1. MIRROR_MODE_AUTO(默认值,对Front Camera做水平mirror,Rear camera不做mirror) 2. MIRROR_MODE_H 3. MIRROR_MODE_NONE 4. MIRROR_MODE_V 注:该值只影响Buffer的Transform matrix,送给Consumer的buffer本身是没有做mirror的 |
OutputConfiguration | Description |
---|---|
void setTimestampBase(int) int getTimestampBase() |
设置/获取该OutputConfiguration的buffer timestamp 基准 可设置的值如下: 1. TIMESTAMP_BASE_CHOREOGRAPHER_SYNCED 2. TIMESTAMP_BASE_DEFAULT(默认值) 3. TIMESTAMP_BASE_MONOTONIC 4.TIMESTAMP_BASE_REALTIME 5.TIMESTAMP_BASE_SENSOR(由 CameraCharacteristics.SENSOR_INFO_TIMESTAMP_SOURCE 决定) |
判断是否支持Stream usecase:
CameraCharacteristics | Description |
---|---|
REQUEST_AVAILABLE_CAPABILITIES | 如果支持,则可以从Capabilities里面获取到 REQUEST_AVAILABLE_CAPABILITIES _STREAM_USE_CASE |
SCALER_AVAILABLE_STREAM_USE_CASES | 获取当前Camera支持的stream usecase列表 所有支持的列表如下: SCALER_AVAILABLE _STREAM_USE_CASES_DEFAULT SCALER_AVAILABLE _STREAM_USE_CASES_PREVIEW SCALER_AVAILABLE _STREAM_USE_CASES_PREVIEW_VIDEO_STILL SCALER_AVAILABLE _STREAM_USE_CASES_STILL_CAPTURE SCALER_AVAILABLE _STREAM_USE_CASES_VIDEO_CALL SCALER_AVAILABLE _STREAM_USE_CASES_VIDEO_RECORD |
SCALER_MANDATORY_USE_CASE_STREAM_COMBINATIONS | 为多个OutputConfiguration设置stream usecase时,通过该静态属性可以得知,一定支持什么样的组合 |
如何Enable:
OutputConfiguration | Description |
---|---|
void setStreamUseCase(long) long getStreamUseCase() |
设置/获取某路OutputConfiguration 的 stream usecase 不支持/未设置的话, 默认是 SCALER_AVAILABLE_STREAM_USECASESDEFAULT |
CameraCharacteristics | Description |
---|---|
REQUEST_AVAILABLE_CAPABILITIES | 如果支持,则可以从Capabilities里面获取到REQUEST_AVAILABLE_CAPABILITIES _DYNAMIC_RANGE_TEN_BIT |
REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES | 返回一个 DynamicRangeProfiles 实例。 通过DynamicRangeProfiles# getSupportedProfiles 可以拿到支持的Dynamic range profiles 所有支持的profiles(DynamicRangeProfiles)如下: STANDARD HLG10 HDR10 HDR10_PLUS DOLBY_VISION_10B_HDR_REF DOLBY_VISION_10B_HDR_REF_PO DOLBY_VISION_10B_HDR_OEM DOLBY_VISION_10B_HDR_OEM_PO DOLBY_VISION_8B_HDR_REF DOLBY_VISION_8B_HDR_REF_PO DOLBY_VISION_8B_HDR_OEM DOLBY_VISION_8B_HDR_OEM_PO |
REQUEST_RECOMMENDED_TEN_BIT_DYNAMIC_RANGE_PROFILE | 推荐使用的Dynamic profile 能在性能/内存/功耗做到最佳(最平衡) |
SCALER_MANDATORY_TEN_BIT_OUTPUT_STREAM_COMBINATIONS | 为多个OutputConfiguration设置 dynamic range profile时通过该静态 属性可以得知一定支持什么样的组合 |
如何Enable:
OutputConfiguration | Description |
---|---|
void setDynamicRangeProfile(long) long getDynamicRangeProfile() |
设置/获取某路OutputConfiguration的 dynamic range profile对应output format只能是 ImageFormat#YCBCR_P010 或 ImageFormat#PRIVATE |
静态属性:
CameraCharacteristics | Description |
---|---|
CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES | 如果支持video preview stabilization 该key会包含 CONTROL_VIDEO_STABILIZATION _MODE_PREVIEW_STABILIZATION |
SCALER_MANDATORY_PREVIEW_STABILIZATION _OUTPUT_STREAM_COMBINATIONS |
使能video preview stabilization后 通过该静态属性可以得知一定支持什么样的组合 |
如何打开 Video preview stabilization功能:
CaptureRequest | Value |
---|---|
CONTROL_VIDEO_STABILIZATION_MODE | 设置为 CameraMetadata#CONTROL_VIDEO_STABILIZATION _MODE_PREVIEW_STABILIZATION |
静态属性增强:
CameraExtensionCharacteristics | Description |
---|---|
Set<Key> getAvailableCaptureRequestKeys(int) |
获取可以在Camera extension session中设置的capture request keys |
Set<Key> getAvailableCaptureResultKeys(int) |
获取可以在Camera extension session中获取的capture results keys |
EXTENSION_FACE_RETOUCH |
废弃EXTENSION_BEAUTY,该成用EXTENSION_FACE_RETOUCH |
Session增强:
CameraExtensionSession.ExtensionCaptureCallback | Description |
---|---|
void onCaptureResultAvailable(CameraExtensionSession, CaptureRequest, TotalCaptureResult) |
当buffer和TotalCaptureResult都送回给App后,该回调被调用。 类似Camera2里面的onCaptureCompleted。 |
关于TotalCaptureResult请参阅:30.Android Camera2 API CaptureResult详解
本文链接:http://so.lmcjl.com/news/16344/