【发布时间】: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 回调驻留在具有主要活动的类中。
-
不知道最近快门延迟有没有减少。 (我转移到其他任务。)