我正在开发一个Android应用程序,它正在处理来自摄像头的输入图像并将其显示给用户.这很简单,我使用setPreviewCallbackWithBuffer在相机对象上注册了一个PreviewCallback.
使用旧的相机API,这很容易并且运行顺畅
public void onPreviewFrame(byte[] data, Camera cam) {
// custom image data processing
}
我正在尝试移植我的应用程序以利用新的Camera2 API,我不确定我该怎么做.我在L预览示例中使用了Camera2Video,可以录制视频.但是,样本中没有直接的图像数据传输,因此我不明白应该在何处获取图像像素数据以及如何处理它.
有人可以帮我或建议如何在Android L中获得PreviewCallback的功能,或者如何在将其显示到屏幕之前处理相机的预览数据? (相机对象上没有预览回调)
谢谢!
解决方法:
由于Camera2 API与当前的Camera API非常不同,因此阅读文档可能会有所帮助.
一个很好的起点是camera2basic示例.它演示了如何使用Camera2 API并配置ImageReader来获取JPEG图像并注册ImageReader.OnImageAvailableListener以接收这些图像
要接收预览帧,您需要将ImageReader的表面添加到setRepeatingRequest的CaptureRequest.Builder.
此外,您应该将ImageReader的格式设置为YUV_420_888,这将在8MP时为您提供30fps(Nexus 5的文档保证在8MP时为30fps).