使用 Android Camera2 API 快速捕获 flash/no-flash 图像
Capture flash/no-flash images quickly using Android Camera2 API
我正在编写一个 android 应用程序以在用户按下捕获按钮时快速捕获 flash/no-flash 图像对。为了编写我的应用程序,我参考了 Camera2Basic 应用程序 here。
从 Android 文档中,我发现要触发闪光灯,预览请求生成器应该将 AE_MODE 设置为 AE_MODE_ON_ALWAYS_FLASH。
我正在使用三个请求生成器:preview、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 生成器,并提交静态捕获请求使用以上 flash 生成器。使用此序列,我 always 在 Nexus 5 中获得正确的闪存图像。pre-flash 是 总是自动处理。
回到原题,截取一对flash/no-flash张图片,我的步骤顺序如下:
在拍照时,我使用 preview 构建器启动 auto-focus 触发器。
当auto-focus完成后,我使用noflash和flash[=124连续提交两个静态捕获请求=] 建设者(首先是 noflash,然后是 flash)
然而,第一个图像是flash图像和second是一个no-flash图像。我不明白输出中的这种反转。
- JPEG 大小写: 第一个图像是总是一个合适的flash图片,second图片是总是一个合适的no-flash图片如下图:
Flash 图像对应于使用 noflash 生成器提交的请求:
No-flash 与使用 flash 生成器提交的请求相对应的图像:
- YUV_420_888 案例: 与 JPEG 相同,但是,noflash 图像永远不合适。可以看到右侧有一条白条,颜色也不对,而且很吵!
Flash 图像对应于使用 noflash 生成器提交的请求:
不正确的no-flash图像对应于使用flash生成器提交的请求:
Off-course,因为在 YUV_420_888 格式中,两张图像是背靠背拍摄的,我在两者之间添加了一个 preview 请求以防止溢出。
我的问题是:
为什么输出图片的顺序是反的?
为什么no-flash格式的YUV_420_888图片不正确?
请帮忙。
确认几件事:
- 确保触发器仅针对单个请求设置为启动,而不是连续设置
- 如果AE_MODE是AE控制闪光的其中之一,则忽略FLASH_MODE;最好不要碰它,以防万一。
- 确保使用 STILL_CAPTURE 请求模板作为最终捕获请求;否则主闪光灯预计不会闪光。
- 您应该可以在闪光灯请求之后几乎立即提交第二个不闪光灯 STILL_CAPTURE 请求(为了安全起见,请留下一个缓冲区请求,因为由于滚动快门,主闪光灯可能会部分在闪光捕捉前后一帧可见);只需提交预览请求,然后提交带有 AE_MODE_ON 的 STILL_CAPTURE 请求。
- 为了获得最大速度,请不要捕获 JPEG 图片;额外的编码时间会导致图像之间的延迟。使用 YUV_420_888 并自己创建 JPEG。
我正在编写一个 android 应用程序以在用户按下捕获按钮时快速捕获 flash/no-flash 图像对。为了编写我的应用程序,我参考了 Camera2Basic 应用程序 here。
从 Android 文档中,我发现要触发闪光灯,预览请求生成器应该将 AE_MODE 设置为 AE_MODE_ON_ALWAYS_FLASH。
我正在使用三个请求生成器:preview、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 生成器,并提交静态捕获请求使用以上 flash 生成器。使用此序列,我 always 在 Nexus 5 中获得正确的闪存图像。pre-flash 是 总是自动处理。
回到原题,截取一对flash/no-flash张图片,我的步骤顺序如下:
在拍照时,我使用 preview 构建器启动 auto-focus 触发器。
当auto-focus完成后,我使用noflash和flash[=124连续提交两个静态捕获请求=] 建设者(首先是 noflash,然后是 flash)
然而,第一个图像是flash图像和second是一个no-flash图像。我不明白输出中的这种反转。
- JPEG 大小写: 第一个图像是总是一个合适的flash图片,second图片是总是一个合适的no-flash图片如下图:
Flash 图像对应于使用 noflash 生成器提交的请求:
No-flash 与使用 flash 生成器提交的请求相对应的图像:
- YUV_420_888 案例: 与 JPEG 相同,但是,noflash 图像永远不合适。可以看到右侧有一条白条,颜色也不对,而且很吵!
Flash 图像对应于使用 noflash 生成器提交的请求:
不正确的no-flash图像对应于使用flash生成器提交的请求:
Off-course,因为在 YUV_420_888 格式中,两张图像是背靠背拍摄的,我在两者之间添加了一个 preview 请求以防止溢出。
我的问题是:
为什么输出图片的顺序是反的?
为什么no-flash格式的YUV_420_888图片不正确?
请帮忙。
确认几件事:
- 确保触发器仅针对单个请求设置为启动,而不是连续设置
- 如果AE_MODE是AE控制闪光的其中之一,则忽略FLASH_MODE;最好不要碰它,以防万一。
- 确保使用 STILL_CAPTURE 请求模板作为最终捕获请求;否则主闪光灯预计不会闪光。
- 您应该可以在闪光灯请求之后几乎立即提交第二个不闪光灯 STILL_CAPTURE 请求(为了安全起见,请留下一个缓冲区请求,因为由于滚动快门,主闪光灯可能会部分在闪光捕捉前后一帧可见);只需提交预览请求,然后提交带有 AE_MODE_ON 的 STILL_CAPTURE 请求。
- 为了获得最大速度,请不要捕获 JPEG 图片;额外的编码时间会导致图像之间的延迟。使用 YUV_420_888 并自己创建 JPEG。