第9讲 StreamConfigurationMap详解一 - Android Camera2 API

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

更多资源:

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

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

Android Camera2 API