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

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

赞(2)
未经允许不得转载:极客笔记 » 第49讲 Android13 Camera2 New APIs介绍

评论 1

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    写的不错,受益匪浅

    崔俊华7个月前 (08-23)回复
Android Camera2参考
Android Camera2参考概述
Android Camera2参数参考
Android Camera2参数参考概述
Android Camera2指南
Android Camera2指南概述
Android Camera HAL开发
Android Camera HAL开发概述
Android Camera2 API
第2讲 Android Camera 架构介绍第3讲 Camera2 API 概述第4讲 Open和Close Camera流程第5讲 GeekCamera2介绍第6讲 Open和Close Camera代码实现第7讲 Hardware Level详解第8讲 AVAILABLE_CAPABILITIES详解第9讲 StreamConfigurationMap详解一第10讲 StreamConfigurationMap详解二第11讲 StreamConfigurationMap实战一第12讲 StreamConfigurationMap实战二第13讲 为什么需要OutputConfiguration第14讲 OutputConfiguration API详解第15讲 Surface Sharing实战第16讲 Deferred Surface实战第17讲 Reprocessable Capture Session详解一第18讲 Reprocessable Capture Session详解二第19讲 App如何实现ZSL功能第20讲 SessionConfiguration详解第21讲 createCaptureSession详解第22讲 SessionParameter实战第23讲 CaptureRequest详解第24讲 如何操作VendorTag第25讲 获取Physical Camera数据流第26讲 CameraCaptureSession详解第27讲 CameraCaptureSession.CaptureCallback详解第28讲 GeekCamera2连拍实战第29讲 SlowMotion实战第30讲 CaptureResult详解第31讲 AE自动曝光 Part 1第32讲 AE自动曝光 Part 2第33讲 AE自动曝光实战第34讲 AE手动曝光第35讲 AE手动曝光实战第36讲 Flash闪光灯控制第37讲 拍照打闪实战第38讲 通过CropRegion控制Zoom缩放第39讲 通过ZoomRatio控制Zoom缩放第40讲 Digital Zoom缩放实战第41讲 Touch AE实战第42讲 AF自动对焦第43讲 AF自动对焦 第二部分第44讲 AF自动对焦实战第45讲 手动对焦实战第46讲 AWB自动白平衡第47讲 AWB自动白平衡实战第48讲 FD人脸检测第49讲 Android13 Camera2 New APIs介绍