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

  • INTERIOR 车身框架(或客舱)的内部.
  • EXTERIOR 车身框架的外部.
  • EXTRA 指车辆之外的地方,如拖车

在这个坐标系中,车身框架的每一侧定义如下

  • FRONT是y轴变大方向.
  • REAR 是y轴减少的方向.
  • LEFT 是x轴变大方向.
  • RIGHT 是x轴减少的方向.

Torch flash strength 相关

为什么要新增Torch Flash可调整strength功能?

判断是否支持

CameraCharacteristicsDescription
FLASH_INFO_STRENGTH_MAXIMUM_LEVEL大于1表示支持控制strength
等于1表示不支持控制strength
FLASH_INFO_STRENGTH_DEFAULT_LEVEL推荐使用的torch flash strength level
大于这个值可能会引发thermal,对功耗有影响

控制方式

CameraManagerDescription
void turnOnTorchWithStrengthLevel(String, int)调整Torch flash 的strength level
int getTorchStrengthLevel(String)获取当前使用的strength level

状态回调

CameraManager.TorchCallbackDescription
void onTorchStrengthLevelChanged(String, int)Torch flash的strength level发生改变后,会通过该方法回调给App

OutputConfiguration 相关

关于OutputConfiguration的介绍请参阅:14.Android Camera2 API OutputConfiguration API详解

Mirror

为什么要新增Mirror功能?

如何设置/获取Mirror:

OutputConfigurationDescription
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

OutputConfigurationDescription
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:

CameraCharacteristicsDescription
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:

OutputConfigurationDescription
void setStreamUseCase(long)
long getStreamUseCase()
设置/获取某路OutputConfiguration 的 stream usecase
不支持/未设置的话,默认是 SCALER_AVAILABLE_STREAM_USECASESDEFAULT

10bit HDR output stream

CameraCharacteristicsDescription
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:

OutputConfigurationDescription
void setDynamicRangeProfile(long)
long getDynamicRangeProfile()
设置/获取某路OutputConfiguration的dynamic range profile
对应output format只能是ImageFormat#YCBCR_P010 或 ImageFormat#PRIVATE

Video preview stabilization相关

静态属性:

CameraCharacteristicsDescription
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功能:

CaptureRequestValue
CONTROL_VIDEO_STABILIZATION_MODE设置为
CameraMetadata#CONTROL_VIDEO_STABILIZATION_MODE_PREVIEW_STABILIZATION

Camera extension增强

静态属性增强:

CameraExtensionCharacteristicsDescription
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.ExtensionCaptureCallbackDescription
void onCaptureResultAvailable(CameraExtensionSession, CaptureRequest, TotalCaptureResult)当buffer和TotalCaptureResult都送回给App后,该回调被调用。
类似Camera2里面的onCaptureCompleted。

关于TotalCaptureResult请参阅:30.Android Camera2 API CaptureResult详解

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

deepinout_camera

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值