第27讲 Android Camera2 API CameraCaptureSession.CaptureCallback详解

本讲是Android Camera专题系列的第27讲,我们介绍Android Camera2 API专题的CameraCaptureSession.CaptureCallback详解,包括如下内容:

  • CameraCaptureSession.CaptureCallback详解
  • CameraCaptureSession.CaptureCallback状态转换

视频在线观看:

加入知识星球与更多Camera同学交流
– 星球名称:深入浅出Android Camera
– 星球ID: 17296815



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状态转换

CameraCaptureSession.CaptureCallback状态转换

赞(2)
未经允许不得转载:极客笔记 » 第27讲 Android Camera2 API CameraCaptureSession.CaptureCallback详解
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

Android Camera2 API