使用camera2 API拍摄静态图像时无法触发闪光灯

问题描述 投票:0回答:1

我尝试使用 Camera2 API 捕获图像时自动触发闪光灯。我尝试同时使用 CONTROL_AE_MODE_ON_ALWAYS_FLASH 和 CONTROL_AE_MODE_ON_AUTO_FLASH 但两者都不起作用。

我尝试过的:
将静态捕获构建器的 CONTROL_AE_MODE 设置为 CONTROL_AE_MODE_ON_ALWAYS_FLASH

val captureRequestBuilder = cameraDevice
            .createCaptureRequest(AndroidCameraDevice.TEMPLATE_STILL_CAPTURE)
 
captureRequestBuilder.apply {
set(CaptureRequest.CONTROL_AE_MODE,
     CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH)
}

我也对预览构建器(TEMPLATE_PREVIEW)做了同样的事情,但我没有成功触发闪光灯

使用 CONTROL_AE_MODE_ON_AUTO_FLASH 完成了类似的操作,但它也不起作用,我需要两者都起作用。

参考Google提供的相机样本没有结果
相机样本

是否需要预捕获阶段才能设置闪光灯?

Camera2 基本存储库,在存档之前使用预捕获和闪存

https://stackoverflow.com/a/37149446/25778714

https://developer.android.com/reference/android/hardware/camera2/CaptureResult#CONTROL_AE_PRECAPTURE_TRIGGER

android kotlin android-camera2 camera-flash
1个回答
0
投票

CONTROL_AE_MODE_ON_ALWAYS_FLASH的文档提到了以下内容。

闪光灯可能会在预拍摄序列期间闪光(由 android.control.aePrecaptureTrigger) 并且将始终被触发 android.control.captureIntent 字段设置为的捕获 STILL_CAPTURE

因此,根据文档,即使在 ON_ALWAYS_FLASH 的情况下没有 AE 预捕获触发器,它也应该可以工作。

但是,该设备中的相机 HAL 实现始终有可能存在错误。此外,CTS测试似乎也没有在没有AE预捕获触发的情况下捕获闪光图像的情况,这增加了出现此类错误的机会。您在哪些设备上遇到过此问题?它是来自单一品牌还是发生在各种设备中?

在这种情况下,我建议像 CTS 测试一样,在静态图像捕获之前添加 AE 预捕获触发器。如果您确实不需要预捕获,那么您可以不等待任何 3A 收敛来减少图像捕获延迟。不是 100% 确定,但您甚至可以将预捕获触发器添加到 TEMPLATE_STILL_CAPTURE 请求中。例如,只需将您的代码修改为以下内容即可。

val captureRequestBuilder = cameraDevice
            .createCaptureRequest(AndroidCameraDevice.TEMPLATE_STILL_CAPTURE)
 
captureRequestBuilder.apply {
  set(CaptureRequest.CONTROL_AE_MODE,
     CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH)
  set(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER,
     CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER_START)
}

如果这不起作用,请尝试先像 CTS 测试中那样使用预览模板单独提交 AE 预捕获触发器。请注意,预捕获触发器不应与重复请求一起提交,它应该是单个捕获请求,如静态图像捕获。

此外,您还可以使用watch命令进一步检查捕获请求键/值对是否确实正确提交,以消除您这边的任何实施错误。例如,运行

adb shell cmd media.camera watch start -m android.control.captureIntent,3a && adb shell cmd media.camera watch live
命令,然后捕获图像。 (可能不适用于所有/旧设备)

© www.soinside.com 2019 - 2024. All rights reserved.