第23讲 CaptureRequest详解 - Android Camera2 API

2024年10月25日 第23讲 CaptureRequest详解 极客笔记

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

更多资源:

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

CaptureRequest介绍

CaptureRequest可以理解为告诉Camera底层如何处理某一帧数据,包括两部分内容

  • Settings
    • 硬件相关的参数:sensor, lens, flash等

    • ISP Processing Pipeline相关参数

    • 3A相关参数

  • Output Surfaces

    • CaptureRequest中带的Surfaces必须在创建Session时使用的Surface List的子集

通过CaptureRequest.Builder来创建CaptureRequest

通过不同的方式送给Camera底层

  • capture

  • captureBurst

  • setRepeatingRequest

  • setRepeatingBurst

CaptureRequest类型(通过Capturerequest#isReprocess()可以判断)

  • Regular:CameraDevice#createCaptureRequest

  • Reprocess:CameraDevice#createReprocessCaptureRequest

CaptureRequest.Builder介绍

Builder模式:用于设置CaptureRequest参数和创建CaptureRequest对象

API Description
set(Key key, T value) 设置指定Key对应的Value值
setPhysicalCameraKey(Key key, T value, String physicalCameraId) 设置指定Physical Camera中Key对应的Value值
addTarget(Surface outputTarget) 增加一路输出流
setTag(Object tag) 给CaptureRequest设置一个TAG,用于标识该CaptureRequest,底层在onCaptureCompleted回调时,可以通过Capturerequest#getTag()获取到
build() 创建CaptureRequest对象
get(Key key) 获取指定Key对应的Value
getPhysicalCameraKey(Key key, String physicalCameraId) 获取指定Physical Camera中Key对应的Value值
removeTarget(Surface outputTarget) 删除一路输出流

CaptureRequest Template type介绍

创建CaptureRequest.Builder

API Description
createCaptureRequest(int templateType) 根据Template Type创建CaptureRequest.Builder,注意:这里返回的是带一包默认值的,不同的CameraDevice,这包默认值会不一样,因此不能混用。
createCaptureRequest(int templateType, Set physicalCameraIdSet) 根据Template Type和Physical CameraID Set创建CaptureRequest.Builder,通过Builder#setPhysicalCameraKey可以设置指定Physical Camera的参数。 Physical Camera的参数只适用于有Physical Camera OutputConfiguration的情况(OutputConfiguration#setPhysicalCameraId)。 physicalCameraIdSet来自CameraCharacteristics#getPhysicalCameraIds()
createReprocessCaptureRequest (TotalCaptureResult inputResult) 根据TotalCaptureResult创建用于Reprocess的CaptureRequest.Builder

如何设置Physical Camera的CaptureRequest

  1. 判断能否单独控制Logical MultiCamera中的Physical Camera
    (CameraCharacteristics#getPhysicalCameraIds

  2. 或者可以设置的Physical Camera Keys
    (Cameracharacteristics#getAvailablePhysicalCameraRequestKeys

  3. 创建Physical Camera OutputConfiguration
    (OutputConfiguration#setPhysicalCameraId

  4. 创建CaptureRequest.Builder

  5. setPhysicalCameraKey

  6. addTarget

  7. 获取Physical TotalCaptureResult
    (TotalCaptureResult#getPhysicalCameraTotalResults

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

展开阅读全文