这是关于Android的Camera2 API。由于捕获结果和输出帧是异步生成的,因此可以在实际帧之前获得捕获结果。有没有一种很好的方法可以将生成的帧与相应的捕获结果相关联?
假设您正在谈论发送到ImageReader
或SurfaceTexture
在捕获时发送的帧(如在无处不在的camera2basic示例中),诀窍是比较识别图像的唯一时间戳。
将TotalCaptureResult
可访问的地方保存在您CameraCaptureSession.CaptureCallback
的onCaptureComplete(...)
呼叫中可用的地方。
然后,当实际图像可通过ImageReader.OnAvailableListener
或SurfaceTexture.OnFrameAvailableListener
获得时,获取图像的时间戳:
Long imageTimestamp = Long.valueOf(reader.acquireNextImage().getTimestamp());
要么
Long imageTimestamp = Long.valueOf(surfaceTexture.getTimestamp())
, 分别。
imageTimestamp.equals(totalCaptureResult.get(CaptureResult.SENSOR_TIMESTAMP));
笔记:
时间戳可能不是您设备的真实系统时间戳,但是可以保证它是唯一的并且单调递增,因此它可以作为ID。
如果要将图像发送到SurfaceHolder
或其他图像上,那么您会很不幸,因为仅发送像素信息,而不发送Image
对象中存在的时间戳。我不确定您可以向其他地方发送相框,例如MediaRecorder
或Allocation
,但我认为没有。
TotalCaptureResult
由于您注意到了异步的性质,您可能需要在生成新集合时将它们添加到不断增长的集合中,然后将传入图像的时间戳与所有这些时间戳进行比较。我将让您找出合适的方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句