0

我正在编写一个 android 应用程序以在用户按下捕获按钮时快速捕获 flash/no-flash 图像对。为了编写我的应用程序,我在这里提到了 Camera2Basic 应用程序。

从 Android 文档中,我发现要触发闪存,预览请求构建器应该将AE_MODE设置为AE_MODE_ON_ALWAYS_FLASH

我正在使用三个请求构建器:previewnoflashflash 三个之间的区别是:

  • 预览:AE_MODE 设置为 AE_MODE_ON_ALWAYS_FLASH 和 AF_MODE 设置为 CONTROL_AF_MODE_CONTINUOUS_PICTURE

  • noflash : AE_MODE 设置为 AE_MODE_ON

  • flash : AE_MODE 设置为 AE_MODE_ONALWAYS_FLASH

我正在使用Nexus 5设备,我发现要捕获 Flash 图像,必须具有上述预览构建器和 Flash 构建器,并使用上述Flash构建器提交静态捕获请求。使用这个序列,我能在 Nexus 5 中获得正确的 flash 图像。预闪总是自动处理。

来到原始问题,捕获一对闪光/非闪光图像,我的步骤顺序如下:

  1. 在拍照时,我使用预览构建器开始自动对焦触发。

  2. 自动对焦完成后,我使用noflashflash构建器(首先是 noflash,然后是 flash)背靠背提交两个仍然捕获的请求

但是,我得到的第一张图像是flash 图像第二张无 flash 图像。我不明白这种输出反转。

  1. JPEG 案例: 第一个图像始终正确的 flash 图像第二个图像始终正确的非 flash 图像,如下所示:

对应于使用noflash builder 提交的请求的 Flash 图像:在此处输入图像描述

对应于使用flash builder 提交的请求的无 flash 图像:在此处输入图像描述

  1. YUV_420_888 案例:与 JPEG 相同,但是,noflash 图像永远不会正确。可以注意到右侧有一条白色条带以及不正确的颜色,而且非常嘈杂

对应于使用noflash builder 提交的请求的 Flash 图像:在此处输入图像描述

对应于使用flash builder 提交的请求的不正确的无 flash图像:在此处输入图像描述

偏离路线,因为在 YUV_420_888 格式中,两个图像是背靠背捕获的,所以我在两者之间添加了一个预览请求以防止溢出。

我的问题是:

  1. 为什么输出图像的顺序颠倒了?

  2. 为什么 YUV_420_888 格式的无闪存图像不正确?

请帮忙。

4

1 回答 1

1

确认几件事:

  1. 确保触发器仅针对单个请求设置为 START,而不是连续设置
  2. 如果 AE_MODE 是 AE 控制闪光灯的其中之一,则忽略 FLASH_MODE;最好不要碰它以防万一。
  3. 确保最终捕获请求使用 STILL_CAPTURE 请求模板;否则主闪光灯不会触发。
  4. 您应该能够在闪光灯请求之后几乎立即提交第二个无闪光灯 STILL_CAPTURE 请求(为安全起见,请留下一个缓冲区请求,因为由于滚动快门,主闪光灯可能在闪光灯前后一帧部分可见捕获); 只需提交预览请求,然后使用 AE_MODE_ON 提交 STILL_CAPTURE 请求。
  5. 为获得最大速度,请勿捕获 JPEG 图像;额外的编码时间会导致图像之间的延迟。使用 YUV_420_888 并自己创建 JPEG。
于 2016-03-17T19:25:36.847 回答