本讲是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 |