我正在开发一款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次。
有没有办法在对帧数据执行操作的同时加快相机的回调频率?
答案 0 :(得分:0)
无需重写代码,您可以利用现代设备的多核架构:将处理卸载到线程池,
但很可能您可以通过优化显着提高算法的性能。转换为本机可以提供帮助,特别是如果您完全涉及NEON向量指令。
如果您使用RenderScript重写处理或以其他方式使用图形加速器的强大功能,则可以实现主要加速。