给定一个已知的周期性运动(例如,步行),我想在运动的同一点(即不同时期内的相同时间偏移)拍摄全分辨率快照。但是在 Nexus S(当前运行 OS 4.1.1,但以前的 OS 版本也是如此)上,我看到快门延迟的变化如此之大,以至于我无法准确地计划快照的时间。这是 50 张照片的快门滞后直方图。(我在 Camera.takePicture() 之前用一个 System.nanoTime() 测量了快门延迟,在快门回调开始时用另一个 System.nanoTime() 测量了快门延迟。相机镜头始终被覆盖以消除由于照明引起的任何变化。)
我可以在应用程序中做些什么来减少这种快门延迟可变性吗?(在这个应用程序中,平均延迟可以是任何持续时间,但标准偏差必须很小......远小于上面直方图中显示的快门延迟的 0.5 秒标准偏差。)我希望有人有一个聪明的建议. 如果我没有得到任何建议,我会在 Android 错误跟踪器中发布功能请求。
更新:我按照 RichardC 在https://groups.google.com/forum/?hl=en&fromgroups#!topic/android-developers/WaHhTicKRA0的建议关闭了自动对焦(通过将焦点设置为无穷大) 它有帮助,如图所示以下直方图。有什么想法可以进一步减少快门延迟可变性吗?
更新 2:我禁用了剩余的自动参数:白平衡、场景模式、闪光灯。下面的快门延迟时间变化直方图似乎与运行 OS 4.1.1 的 Nexus S 一样好。快门延迟时间的可变性要小得多,也许可以通过在 Camera.takePicture() 中指定一个可选的最小快门延迟时间,如果它在指定的最小值之前准备好,它将延迟快门。我已经向 Android 问题跟踪器发布了一个功能请求。如果您也有兴趣获得该功能,请在http://code.google.com/p/android/issues/detail?id=35785上“加星”