Android Camera2将TotalCaptureResult与Frame关联

达曼

这是关于Android的Camera2 API。由于捕获结果和输出帧是异步生成的,因此可以在实际帧之前获得捕获结果。有没有一种很好的方法可以将生成的帧与相应的捕获结果相关联?

rcsumner

假设您正在谈论发送到ImageReaderSurfaceTexture在捕获时发送的帧(如在无处不在的camera2basic示例中),诀窍是比较识别图像的唯一时间戳。

  1. TotalCaptureResult可访问地方保存在您CameraCaptureSession.CaptureCallbackonCaptureComplete(...)呼叫中可用地方

  2. 然后,当实际图像可通过ImageReader.OnAvailableListenerSurfaceTexture.OnFrameAvailableListener获得时,获取图像的时间戳:

Long imageTimestamp = Long.valueOf(reader.acquireNextImage().getTimestamp()); 要么

Long imageTimestamp = Long.valueOf(surfaceTexture.getTimestamp()), 分别。

  1. 将时间戳与以下内容进行比较: imageTimestamp.equals(totalCaptureResult.get(CaptureResult.SENSOR_TIMESTAMP));

笔记:

  • 时间戳可能不是您设备的真实系统时间戳,但是可以保证它是唯一的并且单调递增,因此它可以作为ID。

  • 如果要将图像发送到SurfaceHolder或其他图像上,那么您会很不幸,因为仅发送像素信息,而不发送Image对象中存在的时间戳我不确定您可以向其他地方发送相框,例如MediaRecorderAllocation,但我认为没有。

  • TotalCaptureResult由于您注意到了异步的性质,您可能需要在生成集合时将它们添加到不断增长的集合中,然后将传入图像的时间戳与所有这些时间戳进行比较。我将让您找出合适的方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章