第9讲 StreamConfigurationMap详解一 - Android Camera2 API

本讲是Android Camera专题系列的第9讲,我们介绍Android Camera2 API专题的StreamConfigurationMap详解一部分。

视频在线观看:

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

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

StreamConfigurationMap 概述

StreamConfigurationMap 概述

  • 存储可以使用的Stream Configurations(流配置信息)

  • 这些信息用于创建Surface时使用

  • 包括如下几大功能

    • 输出流配置信息
    • 输入流配置信息
    • 高分辨率流配置信息
    • 高帧率流配置信息

StreamConfigurationMap-输出流配置信息

输出流配置信息API Description API
getOutputFormats 返回输出流支持的Format列表,这些Format定义在ImageFormat 或 PixelFormat。这个Format列表中的Format,在isOutputSupportedFor(int format)后会返回True。 API 21
getOutputSizes(int format) StreamConfigurationMap-输出流配置信息 API 21
getOutputSizes(Class klass) 返回指定Class支持的输出流Size列表(不包括High Resolution),这个函数只返回ImageFormat#PRIVATE的Size列表,这个方法建议只用于不知道该使用什么Format时 API 21
isOutputSupportedFor(int format) 返回指定的Format是否支持配置为输出流,返回True的话,在getOutputSizes(int format)一定能获取到非空列表 API21
isOutputSupportedFor(Class klass) 返回指定的klass是否支持配置为接收Camera Buffer的Consumer,只有这6个组件会返回true:SurfaceTexture, SurfaceHolder, ImageReader, MediaRecorder, MediaCodec, Allocation。 API21
isOutputSupportedFor(Surface surface) StreamConfigurationMap-输出流配置信息 API 21

判断是否为Flexible Consumer

判断是否为Flexible Consumer

Min Frame Duration

当ISP处理模块的Mode(android.*.mode)设置为OFF/FAST时,这个值等于android.sensor.frameDuration

Stall Frame Duration

某路Buffer在Min Frame Duration基础上额外增加的处理时间,通常如下Format的Buffer有Stall Duration

  • JPEG

  • RAW16

  • RAW_PRIVATE

如下Format的Buffer的Stall Duration为0

  • YUV_420_888

  • Implementation-Defined

输出流配置信息API Description API
getOutputMinFrameDuration(int format, Size size) Min Frame Duration API 21
getOutputMinFrameDuration(Class klass, Size size) 返回指定klass和Size的最小Frame Duration,单位是NS。 API 21
getOutputStallDuration(int format, Size size) 返回指定Format和Size的Stall Frame Duration,单位是NS。 API21
getOutputStallDuration(Class klass, Size size) 返回指定klass和Size的Stall Frame Duration,单位是NS。 API 21

Camera ImageFormat vs HAL Pixel Format

ImageFormat/PixelFormat Value HAL Pixel Format Value
ImageFormat.JPEG 256 (0x00000100) HAL_PIXEL_FORMAT_BLOB 33
ImageFormat.DEPTH_POINT_CLOUD 257 (0x00000101) HAL_PIXEL_FORMAT_BLOB 33
ImageFormat.DEPTH_JPEG 1768253795 (0x69656963) HAL_PIXEL_FORMAT_BLOB 33
ImageFormat.HEIC 1212500294 (0x48454946) HAL_PIXEL_FORMAT_BLOB 33
ImageFormat.DEPTH16 1144402265 (0x44363159) HAL_PIXEL_FORMAT_Y16 540422489
ImageFormat.RAW_DEPTH 4098(0x1002) HAL_PIXEL_FORMAT_RAW16 32
ImageFormat.RAW_SENSOR 32 (0x00000020) HAL_PIXEL_FORMAT_RAW16 32
ImageFormat.RAW_PRIVATE 36 (0x00000024) HAL_PIXEL_FORMAT_RAW_OPAQUE 36
ImageFormat.RAW10 37 (0x00000025) HAL_PIXEL_FORMAT_RAW10 37
ImageFormat.RAW12 38 (0x00000026) HAL_PIXEL_FORMAT_RAW12 38
ImageFormat.PRIVATE 34 (0x00000022) HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED 34
ImageFormat/PixelFormat Value HAL Pixel Format Value
ImageFormat.YUV_420_888 35 (0x00000023) HAL_PIXEL_FORMAT_YCBCR_420_888 35
ImageFormat.YV12 842094169 (0x32315659) HAL_PIXEL_FORMAT_YV12 842094169
ImageFormat.NV21 17 (0x00000011) HAL_PIXEL_FORMAT_YCRCB_420_SP 17
ImageFormat.NV16 16 (0x00000010) HAL_PIXEL_FORMAT_YCBCR_422_SP 16
ImageFormat.YUY2 20 (0x00000014) HAL_PIXEL_FORMAT_YCBCR_422_I 20
ImageFormat.Y8 538982489 (0x20203859) HAL_PIXEL_FORMAT_Y8 538982489
ImageFormat.YCBCR_P010 54 (0x00000036) HAL_PIXEL_FORMAT_YCBCR_P010 54
ImageFormat/PixelFormat Value HAL Pixel Format Value
PixelFormat.RGBA_8888 1 (0x00000001) HAL_PIXEL_FORMAT_RGBA_8888 1
PixelFormat.RGBX_8888 2 (0x00000002) HAL_PIXEL_FORMAT_RGBX_8888 2
PixelFormat.RGB_888 3 (0x00000003) HAL_PIXEL_FORMAT_RGB_888 3
PixelFormat.RGB_565 4 (0x00000004) HAL_PIXEL_FORMAT_RGB_565 4
Not Supported NA HAL_PIXEL_FORMAT_BGRA_8888 5
PixelFormat.RGBA_F16 22 (0x00000016) HAL_PIXEL_FORMAT_RGBA_FP16 22
PixelFormat.RGBA_1010102 43 (0x0000002b) HAL_PIXEL_FORMAT_RGBA_1010102 43

一个HAL Pixel Format如何对应多个ImageFormat?从Data Space的角度进行切分

ImageFormat Data Space Stream Configuration Metadata
JPEG HAL_DATASPACE_V0_JFIF SCALER_AVAILABLE_STREAM_CONFIGURATIONS
DEPTH_POINT_CLOUD
DEPTH16
RAW_DEPTH
HAL_DATASPACE_DEPTH DEPTH_AVAILABLE_DEPTH
_STREAM_CONFIGURATIONS
DEPTH_JPEG HAL_DATASPACE_DYNAMIC_DEPTH DEPTH_AVAILABLE_DYNAMIC
_DEPTH_STREAM_CONFIGURATIONS
HEIC HAL_DATASPACE_HEIF HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS
Others HAL_DATASPACE_UNKNOWN SCALER_AVAILABLE_STREAM_CONFIGURATIONS
赞(7)
未经允许不得转载:极客笔记 » 第9讲 StreamConfigurationMap详解一

评论 4

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

    请问API里的configurestreammap和hal层里的流程configurestream有什么联系吗?我在adb直接抓log没有出现map的流。

    逻辑架构11个月前 (04-22)回复
    • configureStreams配置的每一路stream支持的size和format,app会从 StreamConfigurationMap去查询

      admin11个月前 (04-23)回复
  2. #2

    就预览尺寸来说,可用的一组画幅是在初始化Caps的时候给到具体的值,然后从HAL层一步步提交上去的吗?我跟到HwEnvironment初始化这里为什么找不到往上的步骤了呢?Camera Server和Camera provider的configurestreammap流可以看到吗?APP里configurestreammap是直接调用create接口直接创建的吗?

    逻辑架构11个月前 (04-26)回复
    • 就预览尺寸来说,可用的一组画幅是在初始化Caps的时候给到具体的值,然后从HAL层一步步提交上去的吗?
      ==> 是的,能设置的预览尺寸是静态属性,HAL层起来后就送上去了

      Camera Server和Camera provider的configurestreammap流可以看到吗?
      ==> 可以的

      APP里configurestreammap是直接调用create接口直接创建的吗?
      ==> 对应beginConfigure和endConfigure

      admin11个月前 (05-02)回复
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介绍