这与安卓的Camera2 API有关。由于捕获结果和输出帧是异步产生的,因此可以在实际帧之前获得捕获结果。是否有好的方法将生成的帧与相应的捕获结果相关联?
发布于 2015-03-10 21:59:32
假设您讨论的是在捕获时发送给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));进行比较备注:
SurfaceHolder或其他东西,则运气不好,因为只发送像素信息,而不是Image对象中的时间戳。我不确定其他地方你可以发送一个帧,例如MediaRecorder或Allocation,但我认为不行。TotalCaptureResult时将它们添加到一个不断增长的集合中,然后将传入图像的时间戳与所有这些进行比较,因为您已经注意到了异步的特性。我会让你想办法做你认为合适的事。发布于 2015-03-29 19:17:37
我不得不解决类似的情况(跨曲面同步帧);萨姆纳的解决方案(相应接收到的图像对象的.getTimestamp())对SurfaceTexture和ImageReader都起了作用。
在其他曲面上(正如前面所指出的,不要给您一个Image对象):至少对于MediaCodec,回调接收的BufferInfo对象有一个presentationTimeUs,它是“从与相应输入缓冲区一起传入的表示时间戳派生出来的”,至少对我来说,它似乎与来自其他曲面的时间戳相匹配。(注意不同的单位。)
https://stackoverflow.com/questions/28960172
复制相似问题