首页 > 解决方案 > CameraCharacteristics 不会返回所有可用的分辨率

问题描述

camera2使用新API拍照时,我尝试使用最大分辨率。首先,我尝试使用以下代码获取可用的分辨率:

特征:

CameraCharacteristics characteristics = mManager.getCameraCharacteristics(mCameraId);
        StreamConfigurationMap streamMap =
                characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
        if (streamMap == null) {
            throw new RuntimeException("StreamConfigurationMap is null. Should not happen.");
        }
 streamMap.getOutputSizes(ImageFormat.*); // I replaced the star with all possible values 

问题是这会返回以下分辨率列表:([1280x960, 1088x1088, 640x480, 352x288, 176x144, 3264x1836, 3264x2448, 1280x720, 960x720, 720x480, 320x240, 1920x1080, 2400x1080, 1440x1080, 2576x1932, 3264x1468]最大的是 3264x2448)

然而,当使用股票相机应用程序(三星 A70)时,图片分辨率惊人地大,即:4032x3024.

在调查期间,我尝试从商店下载许多相机应用程序,以查看在这种情况下的最大分辨率是多少,并且所有这些应用程序都返回与我相同的分辨率,即:3264x2448.

我的问题是Stock Camera App如何获得比我们其他人更大的分辨率?

标签: androidandroid-camera2

解决方案


您是否也检查了StreamConfigurationMap#getHighResolutionOutputSizes()的输出?

一些设备在此处列出了它们的最高分辨率,因为它们无法保持 BURST_CAPTURE 功能保证的 >= 20-fps 输出速率,如果您想要一个完整级别的设备,则正常尺寸列表中的所有尺寸都需要此功能。只要以正常大小列出至少 8 MP,设备就符合 BURST_CAPTURE 规则,并且可以在 getHighResolutionOutputSizes 下列出更高的分辨率。


推荐阅读