在我的带有camera2界面的Android项目中,我使用AImage_getTimestamp()来获取每张图片的时间戳。但是这个时间戳不同于我在clock_gettime()中获得的系统时间。但我真的需要利用这两段时间来获得一些工作。
我可以理解这两次是在不同的架构中,但我能相互转换吗?或者说,当相机图片的时间戳被创建时,我能得到系统时间吗?
例如,相机时间戳是离散的,如ts0、ts1、ts2和ts3。在我的代码中,我希望在执行某些代码时获得一个实时时间戳ts0‘,这并不完全是ts0,而是添加了时间间隔的ts0。我怎样才能得到这个ts0?

发布于 2019-08-15 15:00:52
您的设备支持实时相机时间戳。如前所述,相机时间戳与引导后运行的实时时间处于相同的坐标系中。在您的ImageReader.OnImageAvailableListener中,可以使用以下代码:
long imageReaderTime = SystemClock.elapsedRealtimeNanos();
Image image = reader.acquireLatestImage();
long cameraTime = image.getTimestamp();可以比较这两种时间戳,而且“imageReaderTime”(您感兴趣的时间戳)略大于“cameraTime”,因为onImageAvailable回调需要很少的时间通知您有关新图像的信息。这也带来了一个轻微的差异。
艾迪·塔瓦拉的回答应该被接受。
发布于 2019-06-20 17:52:35
通常,根据来源的值,相机时间戳要么是基于CLOCK_MONOTONIC,要么是基于CLOCK_BOOTTIME。
当源未知时使用单调;但是无法保证相机时间戳与系统其他部分之间的同步质量;也就是说,曝光时间的实际开始时间可能会缩短相当几毫秒。
实时意味着时间戳位于CLOCK_BOOTTIME时间基中(在Java中,它与SystemClock#elapsedRealtimeNanos匹配)。实时时间戳将密切同步,以便能够与惯性传感器数据(陀螺仪等)准确地结合起来。
我不知道你从clock_gettime上看到了哪种时间戳,但最简单的选择是匹配相机的来源。否则,您需要确定您使用的时间和相机使用之间的偏移量。偏移量不会在单个相机会话中改变,所以您可以在相机使用开始时只测量一次。
https://stackoverflow.com/questions/56624245
复制相似问题