如何更快地使用相机数据执行计算?

时间:2015-11-05 02:46:34

标签: android multithreading performance callback camera

我正在开发一款Android应用,该应用采用逐帧相机数据并计算每帧的像素颜色平均值。问题是,虽然相机回调onPreviewFrame(byte[] data, Camera camera)每秒调用大约24次,但如果我将计算放入相机回调中,则回调频率会显着减慢到每秒8-10次回调,这太低了。

例如:

mCamera.setPreviewCallbackWithBuffer(new Camera.PreviewCallback() {
            @Override
            public void onPreviewFrame(byte[] data, Camera camera) {
                Log.e(tag, "Frame");
            }
}

打印" Frame"每秒约24次,这很好。然而

mCamera.setPreviewCallbackWithBuffer(new Camera.PreviewCallback() {
            @Override
            public void onPreviewFrame(byte[] data, Camera camera) {
                //do heavy calculations with data array
                Log.e(tag, "Frame");
            }
}

打印" Frame"每秒约8次。

有没有办法在对帧数据执行操作的同时加快相机的回调频率?

1 个答案:

答案 0 :(得分:0)

无需重写代码,您可以利用现代设备的多核架构:将处理卸载到线程池,

但很可能您可以通过优化显着提高算法的性能。转换为本机可以提供帮助,特别是如果您完全涉及NEON向量指令。

如果您使用RenderScript重写处理或以其他方式使用图形加速器的强大功能,则可以实现主要加速。