第49讲 Android13 Camera2 New APIs介绍

2024年10月27日 第49讲 Android13 Camera2 New APIs介绍 极客笔记

本讲是Android Camera专题系列的第49讲,我们介绍Android 13 Camera2 New APIs。

更多资源:

资源 描述
在线课程 极客笔记在线课程
知识星球 星球名称:深入浅出Android Camera
星球ID: 17296815
Wechat 极客笔记圈

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功能?

判断是否支持

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

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详解

本文链接:http://so.lmcjl.com/news/16344/

展开阅读全文