【问题标题】:How can I perform calculations with Camera data faster?如何更快地使用相机数据执行计算?
【发布时间】:2015-11-05 02:46:33
【问题描述】:

我正在开发一个 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");
            }
}

每秒打印大约 24 次“帧”,这很好。不过

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

每秒打印大约 8 次“帧”。

有什么办法可以加快Camera的回调频率,同时还要对帧数据进行操作?

【问题讨论】:

    标签: android multithreading performance callback camera


    【解决方案1】:

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

    但很可能您可以通过优化显着提高算法的性能。转换为原生会有所帮助,尤其是在您完全涉及 NEON 矢量指令的情况下。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-12
      • 1970-01-01
      • 1970-01-01
      • 2016-07-05
      • 2013-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多