如何减少 Android 相机快门延迟的可变性?
Posted
技术标签:
【中文标题】如何减少 Android 相机快门延迟的可变性?【英文标题】:How to reduce the variability in Android camera shutter lag? 【发布时间】:2012-07-28 11:02:12 【问题描述】:鉴于已知的周期性运动(例如步行),我想在运动的同一点(即不同时期内的相同时间偏移)拍摄全分辨率快照。然而,在 Nexus S(当前运行 OS 4.1.1,但以前的 OS 版本也是如此)上,我看到快门延迟的变化如此之大,以至于我无法准确地计划快照的时间。这是 50 张照片的快门滞后直方图。 (我在 Camera.takePicture() 之前用一个 System.nanoTime() 测量了快门延迟,在快门回调开始时用另一个 System.nanoTime() 测量了快门延迟。相机镜头始终被覆盖以消除由于照明引起的任何变化。)
我可以在应用程序中做些什么来减少这种快门延迟可变性吗? (在这个应用程序中,平均延迟可以是任何持续时间,但标准偏差必须很小......远小于上面直方图中显示的快门延迟的 0.5 秒标准偏差。)我希望有人有一个聪明的建议.如果我没有收到任何建议,我会在 android 错误跟踪器中发布功能请求。
更新: 根据https://groups.google.com/forum/?hl=en&fromgroups#!topic/android-developers/WaHhTicKRA0 RichardC 的建议,我关闭了自动对焦(通过将焦点设置为无限远) 它有所帮助,如下面的直方图所示。有什么想法可以进一步减少快门延迟可变性吗?
更新 2: 我禁用了剩余的自动参数:白平衡、场景模式、闪光灯。下面的快门延迟时间变化直方图似乎与运行 OS 4.1.1 的 Nexus S 一样好。快门延迟时间的可变性要小得多,也许可以通过在 Camera.takePicture() 中指定一个可选的最小快门延迟时间,如果它在指定的最小值之前准备好,它将延迟快门。我已经向 Android 问题跟踪器发布了一个功能请求。如果您也有兴趣获得该功能,请在http://code.google.com/p/android/issues/detail?id=35785“star”它
【问题讨论】:
对将其作为视频捕获流和捕获周期性帧有什么想法吗?但是,您确实说“全分辨率快照”,这意味着我认为视频流对您不起作用,因为分辨率较低。 感谢您的建议。我很乐意放弃一些图像分辨率以获得更好的图像时间。我还没有过多地探索这个选项,因为即使是视频预览图像也会让我的运动检测/用户界面减慢太多。这可能只是我需要拥有多核处理器的 Android 手机的借口。 :*) 既然新硬件出来了,这有什么用吗?使用 HTC One 时,我有大约 400 毫秒的可变性,但我的 onShutter 回调驻留在具有主要活动的类中。 不知道最近快门延迟有没有减少。 (我转移到其他任务。) 【参考方案1】:什么是x轴,什么是y轴?
您可以使用低级编码(如 NDK/renderscript)而不是使用 java。
您也许可以更改相机的设置以使其更快。
【讨论】:
谢谢。直方图的 y 轴是落入 0.2 秒区间的快门滞后时间的计数。 x 轴是纳秒。我计划最终将渲染脚本用于应用程序的一些计算密集型部分,但我不知道它可以帮助控制像相机这样的硬件。 对不起。直方图的 bin 大小实际上是 0.02 秒(不是我写的 0.2 秒)。 祝你好运,请告诉我们你是否以及如何成功地让它变得更快。我听说 SGS3 的 Omega ROM 上的相机模块声称速度更快,快门延迟更短,但我看不出有什么区别,因为该设备已经很快了。以上是关于如何减少 Android 相机快门延迟的可变性?的主要内容,如果未能解决你的问题,请参考以下文章