本讲是Android Camera专题系列的第9讲,我们介绍Android Camera2 API专题的StreamConfigurationMap详解一部分。
更多资源:
资源 | 描述 |
---|---|
在线课程 | 极客笔记在线课程 |
知识星球 | 星球名称:深入浅出Android Camera 星球ID: 17296815 |
极客笔记圈 |
StreamConfigurationMap 概述
- 存储可以使用的Stream Configurations(流配置信息)
-
这些信息用于创建Surface时使用
-
包括如下几大功能
- 输出流配置信息
- 输入流配置信息
- 高分辨率流配置信息
- 高帧率流配置信息
StreamConfigurationMap-输出流配置信息
输出流配置信息API | Description | API |
---|---|---|
getOutputFormats | 返回输出流支持的Format列表,这些Format定义在ImageFormat 或 PixelFormat。这个Format列表中的Format,在isOutputSupportedFor(int format)后会返回True。 | API 21 |
getOutputSizes(int format) | API 21 | |
getOutputSizes(Class |
返回指定Class支持的输出流Size列表(不包括High Resolution),这个函数只返回ImageFormat#PRIVATE的Size列表,这个方法建议只用于不知道该使用什么Format时 | API 21 |
isOutputSupportedFor(int format) | 返回指定的Format是否支持配置为输出流,返回True的话,在getOutputSizes(int format)一定能获取到非空列表 | API21 |
isOutputSupportedFor(Class |
返回指定的klass是否支持配置为接收Camera Buffer的Consumer,只有这6个组件会返回true:SurfaceTexture, SurfaceHolder, ImageReader, MediaRecorder, MediaCodec, Allocation。 | API21 |
isOutputSupportedFor(Surface surface) | API 21 |
判断是否为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) | API 21 | |
getOutputMinFrameDuration(Class |
返回指定klass和Size的最小Frame Duration,单位是NS。 | API 21 |
getOutputStallDuration(int format, Size size) | 返回指定Format和Size的Stall Frame Duration,单位是NS。 | API21 |
getOutputStallDuration(Class |
返回指定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 |