android 相机 2 必须仅使用支持向后兼容的相机设备

android camera 2 must use only camera devices supporting backward compatibility

我正在构建一个列出所有相机设备的 android 应用程序,我想列出所有相机设备并允许用户使用它们,不仅如此,我还想允许用户可以根据需要更改分辨率,所以我遵循这个 link: https://developer.android.com/training/camera2/camera-enumeration

建议仅使用带有标志的相机设备:

// check if the selected camera device supports basic features
// ensures backward compatibility with the original Camera API
val isBackwardCompatible = cameraCapabilities?.contains(
    CameraMetadata.REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE) ?: false

这会跳过很多镜头,例如,google pixel 6,我确定它在后部尺寸上使用了两个物理摄像头,如果我应用此标志,它只能使用一个镜头,如果我跳过这个问题使用这个是当我尝试使用方法

时应用程序崩溃
cameraConfiguration.getOutputSizes(MediaCodec::class.java)

一旦我在没有“REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE”

的相机设备上调用它,它就会给我这个错误

任何 android 我拿到手并试用我的应用程序的设备,我发现它至少缺少一个镜头(如果不是更多的话),我确信这些镜头可以用于录制视频(我打开相机应用程序并在更改模式时将它们一一覆盖)

如有任何帮助,我们将不胜感激。

解释如何得到这个NullPointerException

val characteristics = cameraManager.getCameraCharacteristics(id)
val cameraConfig =
            characteristics.get(SCALER_STREAM_CONFIGURATION_MAP)!!

//outputSizes is null if the cameraDevice is not backward compatible
val outputSizes = cameraConfig.getOutputSizes(ImageFormat.JPEG)

BACKWARD_COMPATIBLE 设备是支持 YUV 和 JPEG 输出以及一系列基本相机行为的设备。

一般情况下,只有极少数相机类型不会列出BACKWARD_COMPATIBLE;一个这样的例子是纯深度相机,它不会产生 JPEG。对于此类设备,您必须通过 'getOutputFormats' 手动检查实际支持的输出格式,因为它很可能不会列出 JPEG 之类的东西,或者它可能只支持单色输出而不支持彩色,这可能导致无法与录像机一起使用。

如果您看到许多设备因排除 BACKWARD_COMPATIBLE 而被过滤掉,知道这一点会很有趣,因为根据我的经验,它们非常罕见。