使用Camera 2 API捕获图像而无需预览不连贯

时间:2018-07-02 15:05:31

标签: android android-camera android-camera2

我正在尝试修改基本的Camera2 API示例(https://github.com/googlesamples/android-Camera2Basic),以便每x秒拍摄一张图片(然后在后台线程上对其进行处理;我什至不需要保存图片)到磁盘),同时显示流畅的预览。不幸的是,在捕获会话上调用capture()会使预览冻结一两秒钟,从而导致糟糕的用户体验。

有没有一种方法可以直接到达预览表面并读取图像字节?我不在乎图像质量,流畅的UX是重中之重。

1 个答案:

答案 0 :(得分:1)

如果摄像头设备是LEGACY级设备,则很遗憾。

即使对于有限的设备,相机也必须支持BURST_CAPTURE功能,以确保快速捕获全分辨率。所有FULL级别或更高级别的设备均支持BURST_CAPTURE。

但是,即使在性能较低的设备上,通常也可以以视频录制分辨率平稳捕获未压缩的YUV帧。这意味着向您的会话配置中添加YUV_420_888格式的ImageReader,然后处理由此产生的图像。不幸的是,LEGACY设备上的JPEG总是很慢,并且某些LEGACY设备也没有足够的CPU能力来平滑地生成YUV数据(因为必须进行一些转换)。

有关更多详细信息,您可以检查StreamConfigurationMap的输出,并查看在最小帧持续时间1/30秒内运行的输出YUV分辨率;这些应该保证可以在LIMITED或更优质的设备上顺利运行。