【问题标题】:CameraPreview in surfaceview is skipping framesSurfaceview 中的 CameraPreview 正在跳帧
【发布时间】:2015-03-11 02:37:37
【问题描述】:

我有一个使用表面视图来显示相机预览的 Android 应用程序。

但是,图像抖动,logcat 中出现此警告:

Skipped 61 frames!  The application may be doing too much work on its main thread

我很乐意在这里分享我的代码,但该代码由三个类组成:CameraActivity、CameraPreview 类(扩展 SurfaceView)和另一个位于 CameraPreview 之上的自定义视图。

这似乎有很多代码只是扑通一声放在一个stackoverflow问题中,而且由于我不知道要寻找什么来寻找原因,所以我不知道如何缩小范围。

如果有帮助,或者如果有人知道为什么会发生这种情况,我很乐意使用相关代码 sn-ps 编辑问题,我会全力以赴。

【问题讨论】:

  • 搜索方法'onPreviewFrame',把里面的代码贴出来。这是您可以从主线程接收帧数据的地方。
  • 您是直接将预览发送到SurfaceView,还是您捕获预览然后自己在SurfaceView上渲染?
  • 我将预览直接发送到 SurfaceView,这样我可以在捕获之前看到我要捕获的内容

标签: android android-camera surfaceview


【解决方案1】:

如果 Skipped XX frames 警告一次又一次出现,你可能在主线程上做的太多了。为了保持应用程序响应,第 1 条规则是将所有处理移出主线程。最好的方法是use a secondary HandlerThread 处理所有与相机相关的工作。

如果您的应用中使用预览回调,请确保您使用setPreviewCallbackWithBuffer(),否则垃圾收集器可能会带来强大的设备来抓取。如果您的 onPreviewFrame() 方法可能需要一段时间,请考虑使用 ThreadPool 执行程序来实际处理您的帧。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多