为什么Android的ImageReader类这么慢?

时间:2018-06-24 01:53:57

标签: android android-camera2 opencv4android image-reader

我尝试了适用于Android 3.4.1全新JavaCamera2View的OpenCV,但速度太慢(仅显示摄像机视图,速度约为15fps)。当我尝试使用较旧的JavaCameraView时,它给了我不错的效果(〜30fps,这是我的相机的极限)。

我想知道Camera2版本如此之慢并研究实现的原因。我注释掉了图像的所有处理和渲染(只是让相机绘制到内部ImageReader对象,然后使用acquireLastImage()方法将其读取),它仍然是15 fps。但是,当我将目标表面从ImageReader对象更改为视图本身时,它突然给了我30 fps。

问题是,为什么ImageReader课这么慢? 我的猜测是ImageReader正在使用glReadPixels()从使用OpenGL的Surface读取图像,这非常慢,因为它需要将图像从GPU内存传输到CPU内存(或者可能正在等待GPU刷新? ),但我不确定,因为ImageReader所做的全部隐藏在本机代码中。

或者ImageReader很好,OpenCV是否缺少某些内容?

我正在使用ASUS Zenfone 4 Max,Android 7.1.1。

1 个答案:

答案 0 :(得分:0)

我想这与LEGACY相机HAL有关。我最近也遇到了这个问题,实际上,如果您仅使用glReadPixel,则可以获得比ImageReader更好的帧速率。检查以下答案: https://stackoverflow.com/a/51083567/2606068