使用Android Camera2 API快速捕获闪光/非闪光图像

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

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

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

我使用三个请求构建器:预览,noflash和flash三者之间的区别是:

  • 预览: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构建器提交静态捕获请求。使用此序列,我总能在Nexus 5中获得正确的闪光图像。预闪也始终自动处理。

来到原始问题,捕捉一对闪光/不闪光图像,我的步骤如下:

  1. 在拍照中,我使用预览构建器启动自动对焦触发。
  2. 自动对焦完成后,我使用noflash和flash构建器(第一个noflash,然后是flash)重新提交两个静态捕获请求

但是,我得到的第一个图像是闪光图像,第二个是非闪光图像。我不明白这种产量的逆转。

  1. JPEG情况:第一张图像始终是正确的闪光图像,第二张图像始终是正确的无闪光图像,如下所示:

与使用noflash构建器提交的请求相对应的Flash图像:enter image description here

与使用Flash builder提交的请求相对应的非闪存图像:enter image description here

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

与使用noflash构建器提交的请求相对应的Flash图像:enter image description here

与使用Flash builder提交的请求相对应的不正确的非闪存映像:enter image description here

偏离正轨,因为在YUV_420_888格式中,两个图像背靠背拍摄,我在其间添加预览请求以防止溢出。

我的问题是:

  1. 为什么输出图像的顺序颠倒了?
  2. 为什么YUV_420_888格式的无闪光图像不合适?

请帮忙。

android android-camera android-camera2
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。
© www.soinside.com 2019 - 2024. All rights reserved.