第49讲 Android13 Camera2 New APIs介绍

本讲是Android Camera专题系列的第49讲,我们介绍Android 13 Camera2 New APIs,包括如下内容:

  1. Automotive 相关

  2. Torch flash strength 相关

  3. OutputConfiguration 相关

    1. Mirror
    2. Timestamp base
    3. Stream usecase
    4. 10bit HDR output stream
  4. Video preview stabilization相关

  5. Camera extension增强

视频在线观看:

  • 极客笔记:极客笔记在线课程

加入知识星球与更多Camera同学交流
– 星球名称:深入浅出Android Camera
– 星球ID: 17296815

Automotive 相关

针对汽车场景,新增了两个静态属性来描述车载上的摄像头:LENS FACINGLOCATION

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定义的汽车坐标轴如下图所示:

第49讲 Android13 Camera2 New APIs介绍_第1张图片
  • 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 getAvailableCaptureRequestKeys(int) 获取可以在Camera extension session中设置的capture request keys
Set 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详解

你可能感兴趣的:(Android,Camera2,API详解,Android,Camera,Camera2)