第27讲 CameraCaptureSession.CaptureCallback详解 - Android Camera2 API

本讲是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讲 CameraCaptureSession.CaptureCallback详解

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
Android Camera2参考
Android Camera2参考概述
Android Camera2参数参考
Android Camera2参数参考概述
Android Camera2指南
Android Camera2指南概述
Android Camera HAL开发
Android Camera HAL开发概述
Android Camera2 API
第2讲 Android Camera 架构介绍第3讲 Camera2 API 概述第4讲 Open和Close Camera流程第5讲 GeekCamera2介绍第6讲 Open和Close Camera代码实现第7讲 Hardware Level详解第8讲 AVAILABLE_CAPABILITIES详解第9讲 StreamConfigurationMap详解一第10讲 StreamConfigurationMap详解二第11讲 StreamConfigurationMap实战一第12讲 StreamConfigurationMap实战二第13讲 为什么需要OutputConfiguration第14讲 OutputConfiguration API详解第15讲 Surface Sharing实战第16讲 Deferred Surface实战第17讲 Reprocessable Capture Session详解一第18讲 Reprocessable Capture Session详解二第19讲 App如何实现ZSL功能第20讲 SessionConfiguration详解第21讲 createCaptureSession详解第22讲 SessionParameter实战第23讲 CaptureRequest详解第24讲 如何操作VendorTag第25讲 获取Physical Camera数据流第26讲 CameraCaptureSession详解第27讲 CameraCaptureSession.CaptureCallback详解第28讲 GeekCamera2连拍实战第29讲 SlowMotion实战第30讲 CaptureResult详解第31讲 AE自动曝光 Part 1第32讲 AE自动曝光 Part 2第33讲 AE自动曝光实战第34讲 AE手动曝光第35讲 AE手动曝光实战第36讲 Flash闪光灯控制第37讲 拍照打闪实战第38讲 通过CropRegion控制Zoom缩放第39讲 通过ZoomRatio控制Zoom缩放第40讲 Digital Zoom缩放实战第41讲 Touch AE实战第42讲 AF自动对焦第43讲 AF自动对焦 第二部分第44讲 AF自动对焦实战第45讲 手动对焦实战第46讲 AWB自动白平衡第47讲 AWB自动白平衡实战第48讲 FD人脸检测第49讲 Android13 Camera2 New APIs介绍