首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >android camera2将TotalCaptureResult与框架相关联。

android camera2将TotalCaptureResult与框架相关联。
EN

Stack Overflow用户
提问于 2015-03-10 09:33:29
回答 2查看 1.9K关注 0票数 4

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-10 21:59:32

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

  1. TotalCaptureResultCameraCaptureSession.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时将它们添加到一个不断增长的集合中,然后将传入图像的时间戳与所有这些进行比较,因为您已经注意到了异步的特性。我会让你想办法做你认为合适的事。
票数 6
EN

Stack Overflow用户

发布于 2015-03-29 19:17:37

我不得不解决类似的情况(跨曲面同步帧);萨姆纳的解决方案(相应接收到的图像对象的.getTimestamp())对SurfaceTextureImageReader都起了作用。

在其他曲面上(正如前面所指出的,不要给您一个Image对象):至少对于MediaCodec回调接收的BufferInfo对象有一个presentationTimeUs,它是“从与相应输入缓冲区一起传入的表示时间戳派生出来的”,至少对我来说,它似乎与来自其他曲面的时间戳相匹配。(注意不同的单位。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28960172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档