android.scaler.streamConfigurationMap Key值的来源

本文探讨了在使用camera2 API时,streamConfigurationMap中SurfaceHolder.class类型的输出尺寸来源。通过分析发现,这些尺寸受限于相机元数据,并且与帧率有关,最小帧率必须大于20FPS。分析指出,由于限制,可能导致预览窗口小于拍照生成图片的窗口,影响到应用的性能和用户体验。

android.scaler.streamConfigurationMap Key值的来源

一、背景

在开发camera app时,app获取preview的YUV数据,当从KEY CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP的StreamConfigurationMap中获取类型为SurfaceHolder.class的size时,发现它少于picture size,代码如下:

CameraManager manager = (CameraManager) mContext.getSystemService(Context.CAMERA_SERVICE);
CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId);
StreamConfigurationMap map = mCharacteristics.get(cameraId).get(
           CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
Size[] size = map.getOutputSizes(SurfaceHolder.class);

获取的outsize如果少于picture size,如果camera app选择在app中对预览数据进行处理而呈现给用户的话,它将会造成成取景的窗口小于拍照生成图片的窗口。

二、StreamConfigurationMap中数据的来源

StreamConfigurationMap包含有各种camera streamconfig的数据 ,一般我们只知道这些数据来源于camera metadata,从代码看,我们能知道StreamConfigurationMap包含camera metadata中SCALER_AVAILABLE_STREAM_CONFIGURATIONS、SCALER_AVAILABLE_MIN_FRAME_DURATIONS、SCALER_AVAILABLE_STALL_DURATIONS、DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS、DEPTH_AVAILABLE_DEPTH_MIN_FRAME_DURATIONS、DEPTH_AVAILABLE_DEPTH_STALL_DURATIONS、CONTROL_AVAILABLE_HIGH_SPEED_VIDEO_CONFIGURATIONS和SCALER_AVAILABLE_INPUT_OUTPUT_FORMATS_MAP这些键值。
LINUX/android/frameworks/base/core/java/android/hardware/camera2/impl/CameraMetadataNative.java

// Use Command pattern here to avoid lots of expensive if/equals checks in get for overridden
// metadata.
private static final HashMap<Key<?>, GetCommand> sGetCommandMap =
        new HashMap<Key<?>, GetCommand>();
static {
    ......
    sGetCommandMap.put(
            CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP.getNativeKey(),
                    new GetCommand() {
                @Override
       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值