本讲是Android Camera专题系列的第49讲,我们介绍Android 13 Camera2 New APIs,包括如下内容:
-
Automotive 相关
-
Torch flash strength 相关
-
OutputConfiguration 相关
- Mirror
- Timestamp base
- Stream usecase
- 10bit HDR output stream
-
Video preview stabilization相关
-
Camera extension增强
视频在线观看:
- 极客笔记:极客笔记在线课程
加入知识星球与更多Camera同学交流
– 星球名称:深入浅出Android Camera
– 星球ID: 17296815
Automotive 相关
针对汽车场景,新增了两个静态属性来描述车载上的摄像头: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定义的汽车坐标轴如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/195958845a2124bb03c753ddbe1a6e11.png)
- INTERIOR 车身框架(或客舱)的内部.
- EXTERIOR 车身框架的外部.
- EXTRA 指车辆之外的地方,如拖车
在这个坐标系中,车身框架的每一侧定义如下
- FRONT是y轴变大方向.
- REAR 是y轴减少的方向.
- LEFT 是x轴变大方向.
- RIGHT 是x轴减少的方向.
Torch flash strength 相关
为什么要新增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 相关
关于OutputConfiguration的介绍请参阅:14.Android Camera2 API OutputConfiguration API详解
Mirror
为什么要新增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的 |
Timestamp base
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
判断是否支持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 |
10bit HDR output stream
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 DynamicRangeProfiles.HLG10 DynamicRangeProfiles.HDR10 DynamicRangeProfiles.HDR10_PLUS DynamicRangeProfiles.DOLBY_VISION_10B_HDR_REF DynamicRangeProfiles.DOLBY_VISION_10B_HDR_REF_PO DynamicRangeProfiles.DOLBY_VISION_10B_HDR_OEM DynamicRangeProfiles.DOLBY_VISION_10B_HDR_OEM_PO DynamicRangeProfiles.DOLBY_VISION_8B_HDR_REF DynamicRangeProfiles.DOLBY_VISION_8B_HDR_REF_PO DynamicRangeProfiles.DOLBY_VISION_8B_HDR_OEM DynamicRangeProfiles.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 |
Video preview stabilization相关
静态属性:
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 |
Camera extension增强
静态属性增强:
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详解