第14讲 outputconfiguration api详解 -凯发k8旗舰厅

本讲是android camera专题系列的第14讲,我们介绍android camera2 api专题的outputconfiguration api详解。

更多资源:

资源 描述
在线课程
知识星球 星球名称:深入浅出android camera
星球id: 17296815
wechat 极客笔记圈

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

camera课程

python教程

java教程

web教程

数据库教程

图形图像教程

办公软件教程

linux教程

计算机教程

大数据教程

开发工具教程

android camera2 api

网站地图