第14讲 Android Camera2 API OutputConfiguration API详解

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

 

视频在线观看:

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

deepinout_camera

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

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

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

打赏作者

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

抵扣说明:

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

余额充值