第27讲 CameraCaptureSession.CaptureCallback详解 - Android C

2024年10月25日 第27讲 CameraCaptureSession CaptureCallback详解 极客笔记

本讲是Android Camera专题系列的第27讲,我们介绍Android Camera2 API专题的CameraCaptureSession.CaptureCallback详解。

更多资源:

资源 描述
在线课程 极客笔记在线课程
知识星球 星球名称:深入浅出Android Camera
星球ID: 17296815
Wechat 极客笔记圈

CameraCaptureSession.CaptureCallback详解

用于监控Camera HAL处理某个CaptureRequest的处理状态

API Description
onCaptureStarted(session, request, long timestamp, long frameNumber) 当Camera HAL开始处理这个CaptureRequest时调用,对应这一张图像开始曝光时。或者开始reprocess这个CaptureRequest时调用。
onCaptureProgressed(session, request, CaptureResult partialResult) Camera HAL Pipeline中,部分模块完成这个CaptureRequest的处理,有Partial Result上报时调用。
onCaptureCompleted(session, request, TotalCaptureResult result) 这个CaptureRequest处理完成后调用,会打包所有的partial result一起上报给App。
onCaptureBufferLost(session, request, Surface target, long frameNumber) 指定Surface不会收到这个CaptureRequest处理后的Buffer了,通常原因是底层处理这路Stream发生错误或因Flush而主动丢帧。
onCaptureFailed(session, request, CaptureFailure failure) 整个CaptureRequest处理失败时调用,不会有TotalCaptureResult了,onCaptureCompleted不会被调用。如果CaptureFailure#wasImageCaptured为true则表示某些路Surfaces可能会收到Image Buffer。
onCaptureSequenceAborted(session, int sequenceId) 整个序列的CaptureRequest放弃继续处理时调用,通常是由于stopRepeating 或 abortCaptures调用了
onCaptureSequenceCompleted(session, int sequenceId, long frameNumber) 整个序列的CaptureRequest处理完后调用,sequence id等于调用送CaptureRequest方法(ex. capture)的返回值

onCaptureStarted

App如何使用

  • 针对拍照的CaptureRequest,比较适合在这个Callback中播放拍照声音,提示用户开始拍照了

参数

  • request:正在处理的CaptureRequest实例

  • timestamp

    • Regular CaptureRequest:这一帧图像开始曝光时的时间戳

    • Reprocess CaptureRequest:输入图像开始曝光时的时间戳

    • 通常用于同步CaptureResult和Image

frameNumber

  • 这一帧的编号,与CaptureResult#getFrameNumber获取到的值一样

onCaptureProgressed

调用次数和时机

  • 处理一个CaptureRequest,可能会有多次onCaptureProgressed回调。最多回调CameraCharacteristics#REQUEST_PARTIAL_RESULT_COUNT次

不同CaptureRequest可以有不同的回调次数

可能发生在onCaptureStarted之前或之后

每次回调的partial result内容都不重复

App如何使用

  • 在性能要求高的场景中,App可以在partial result里面去查询关心的Metadata值,避免在TotalCaptureResult上来时才去查询
    • 比如需要插入到数据库的信息或后处理Image Buffer时需要的信息

CameraCaptureSession.CaptureCallback状态转换

本文链接:http://so.lmcjl.com/news/16206/

展开阅读全文