Android camera2:捕获请求键不包括我可以从默认应用程序控制的设置

Android camera2: capture request keys don't include settings I can control from the default app

我正在使用 getAvailableCaptureRequestKeys() 来了解我可以修改哪些设置。

比如我要修改ISO。首先我得到所有可用的键:

                        captureRequestKeys = cameraCharact.getAvailableCaptureRequestKeys();

然后我继续将 ISO 设置为我想要的值,前提是相关密钥(在本例中为 CaptureRequest.SENSOR_SENSITIVITY)包含在 captureRequestKeys.

if (captureRequestKeys.contains(CaptureRequest.SENSOR_SENSITIVITY))             
            captReqBuilder.set(CaptureRequest.SENSOR_SENSITIVITY, MAX_ISO);

captureRequestKeys中是否包含密钥取决于终端;特别是 SENSOR_SENSITIVITY 保证只存在于报告为 HARDWARE_LEVEL_FULL 的终端,正如文档所指出的那样。由于我的测试终端是 LEGACY 终端,因此我无法设置 ISO 并不奇怪。

但令我困扰的是,每当我使用默认的相机应用程序拍照时,我都可以做到这一点。所以我的问题是:为什么我可以在使用默认相机应用程序拍照时设置 ISO,但我不能使用 camera2 API 以编程方式进行设置?我错过了什么吗?

相同的论点适用于曝光时间,因为我可以使用应用程序很好地更改它,但密钥不可用。该应用程序是否仅给人以更改这些设置的印象,而实际上它是通过其他方式达到预期效果的?

经过一些研究,我得出结论,库存相机应用程序使用的是旧相机 api。事实上,如果使用 Camera.Parameters parameters = camera.getParameters(); 然后我打印使用 [​​=11=] 获得的字符串,iso 控制是我可以更改的参数之一。因此,对于那些报告 LEGACY 使用 camera2 方法 cameraCharact.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL) 的终端,我决定恢复到旧相机 api 并使用 this page 中提供的解决方案手动设置 iso。