第14讲 OutputConfiguration API详解 - Android Camera2 API

本讲是Android Camera专题系列的第14讲,我们介绍Android Camera2 API专题的OutputConfiguration API详解。

视频在线观看:

加入知识星球与更多Camera同学交流

  • 星球名称:深入浅出Android Camera
  • 星球ID: 17296815

Android Camera2 API课程体系

Android Camera2 API课程体系

OutputConfiguration API概述

API 描述
enableSurfaceSharing() 使能多个Surfaces共享同一个OutputConfiguration
getMaxSharedSurfaceCount() 获取当前OutputConfiguration最大可以被几个Surfaces Share,目前是4个
removeSurface(Surface surface) 删除不需要Share的Surface
addSurface(Surface surface) 向OutputConfiguration增加一个Surface;Deferred Surface和Surface Sharing都需要调用该方法
getSurfaceGroupId() 获取该OutputConfiguration的Surface Group ID
setPhysicalCameraId(String physicalCameraId) 设置该OutputConfiguration属于哪个Physical Camera
addSensorPixelModeUsed(int sensorPixelModeUsed) 设置该OutputConfiguration的Sensor Pixel Mode
removeSensorPixelModeUsed(int sensorPixelModeUsed) 移除之前Add过的Sensor Pixel Mode,如果移除未Add过的Sensor Pixel Mode会发生IllegalArgumentException
createInstancesForMultiResolutionOutput(MultiResolutionImageReader multiResolutionImageReader) 通过MultiResolutionImageReader创建一个Multiresolution的OutputConfiguration列表

enableSurfaceSharing

当App配置的Stream数量超出底层支持的限制时,可以考虑使用Surface Sharing功能。

哪些Surfaces满足Surface Sharing的条件

  • 相同的 size, format, dataSpace, 和 Surface source class,则一定可以Surface Sharing

  • 相同的size, format, 和 dataSpace, 不同的Surface source,则不一定能支持Surface Sharing,如果用这样的OutputConfiguration配置来创建Camera Capture Session,成功则表示可以Share,失败则表示无法Share。

enableSurfaceSharing必须在createCaptureSessionByOutputConfigurations前设置。

通过getMaxSharedSurfaceCount获取当前OutputConfiguration最大支持多少个Surface share同一个stream,目前是hardcode写死为4个。

removeSurface

从OutputConfiguration中移除不需要Share的Surface

用于创建OutputConfiguration的Surface不能被Remove,也就是下列Surface无法被移除

  • 通过构造函数直接传入的Surface

  • 第一次调用addSurface的Deferred Surface

移除未Add过的Surface会发生IllegalArgumentException

addSurface

向OutputConfiguration增加一个Surface

  • For sharing,重复add同一个Surface会发生 IllegalArgumentException
    • Add Surface时要求Size,format,dataspace都一致,否则会发生IllegalArgumentException

Deferred Surface,用于增加已经Ready的Surface

setPhysicalCameraId

一个Logical Camera设备可能对应多个Physical Camera设备,App如何想获取某个Physical Camera的Stream,则需要通过该方法对OutputConfiguration设置Physical Camera ID

合法的Physical Camera ID需要从CameraCharacteristics.getPhysicalCameraIds获取

该方法必须在创建Camera Capture Session之前调用

对Reprocess的支持(待验证)

  • < Android 12:Physical camera stream不能作为Input stream

  • >= Android 12:Physical camera stream可以给logical camera stream reprocess,Physical camera stream可以给physical camera stream reprocess。

addSensorPixelModeUsed(待验证)

可设置的Sensor Pixel Mode

  • CameraMetadata.SENSOR_PIXEL_MODE_DEFAULT

    • StreamConfigurationMap只能来自CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP
  • CameraMetadata.SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION

    • 支持的Capabilities中包含REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR 才能设置这种Sensor Pixel Mode
    • StreamConfigurationMap只能来自CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP_MAXIMUM_RESOLUTION

CaptureRequest需要搭配设置CaptureRequest.SENSOR_PIXEL_MODE参数

MultiResolutionImageReader(待验证)

MultiResolutionImageReader将多个ImageReader封装在一起,这些ImageReader具体如下特性

  • 相同的format,不同的size或不同的Camera ID或不同的Sensor Mode

应用场景

  • Multi-Camera

    • SAT 不同的Physical Camera有不同的Max Resolution,因此针对同一个Logical MultiCamera,在不同的Zoom值下,同一个format对应的Max Resolution可能不一样
  • Ultra high resolution sensor camera

    • 会根据光照条件决定是否要Enable Remosaic Mode,所以拍照的分辨率可能会在最大分辨率和默认分辨率间切换

Stream Configuration Map

  • CameraCharacteristics.SCALER_MULTI_RESOLUTION_STREAM_CONFIGURATION_MAP

赞(4)
未经允许不得转载:极客笔记 » 第14讲 OutputConfiguration API详解

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
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介绍