首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android Camera2同步图像和元数据

Android Camera2同步图像和元数据
EN

Stack Overflow用户
提问于 2019-07-19 00:53:16
回答 1查看 531关注 0票数 0

我有一个使用Android Camera2 API的camera类,当帧传入时有两个回调。一个是与接收实际图像像素数据的surface相关的回调。在这种情况下

代码语言:javascript
复制
private final ImageReader.OnImageAvailableListener mOnPreviewImageAvailableListener = new ImageReader.OnImageAvailableListener() {
    @Override
    public void onImageAvailable(final ImageReader reader) {
        Image previewImage = reader.acquireLatestImage();
        // Use previewImage
    }
};

这是通过将其分配给具有setOnImageAvailableListenerImageReader,并在调用createCaptureSession.时使用该ImageReader来实现的

同时,还有第二个接收CaptureResult元数据的回调。

代码语言:javascript
复制
CameraCaptureSession.CaptureCallback previewCallback = new CameraCaptureSession.CaptureCallback() {
    @Override
    public void onCaptureCompleted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, @NonNull TotalCaptureResult result) {
        // process(result);
    }
};

这是通过传递previewCallback来捕获会话的setRepeatingRequestcapture方法实现的。

问题是如何协调两个回调,以确保图像和CaptureResult引用相同的采集事件。当然,这对于任何类型的高级再处理都是必要的,例如使用具有不同曝光或焦点设置的图像来创建bokeh或HDR。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-19 07:40:53

TotalCaptureResultImage都有纳秒时间戳。对于相同的帧,它们保证具有相同的时间戳。

因此,每次您收到一个时,将其放入队列或类似的队列中,一旦您有了具有匹配时间戳的对,就将该对转发到处理。

为了健壮性,这需要正确处理捕获错误,这可能导致结果或图像丢失,否则您将在队列中拥有从未处理过的孤立对象,或者您将使整个应用程序停滞,等待一个永远不会到达的对象。或者两者都有。一个简单的选择可能是只丢弃超过一到两秒的对象。

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

https://stackoverflow.com/questions/57099350

复制
相关文章

相似问题

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