现在是2017年,我终于开始从Camera1切换到Camera2。在Camera1中,我非常依赖setPreviewCallbackWithBuffer()进行实时帧处理,但在Camera2中,这种方式要慢得多,甚至几乎无法使用。
举个例子,在Moto G3上,Camera1可以轻松产生30-40 FPS,而在Camera2上,最多只能获得10-15 FPS。
这是我创建ImageReader的方法:
imageReader = ImageReader
.newInstance(
previewSize.width, // size is around 1280x720
previewSize.height,
ImageFormat.YUV_420_888, // note, it is not JPEG
2 // max number of images, does not really affect performance
);
imageReader.setOnImageAvailableListener(
callback,
CameraThread.getInstance().createHandler()
);
回调本身只做最少可能的工作:
Image image = reader.acquireNextImage();
image.close();
我已经查看过类似的答案,比如这个。但是他们的问题在于他们使用的是JPEG图像格式而不是YUV_420_888。
如何实现类似Camera1的性能?
YV12图像格式,并确保您拥有最新版本的Android API。 - King ReloadImageReader的图像尺寸,以使预览更加流畅。 - ahasbini