第26讲 CameraCaptureSession详解 - Android Camera2 API

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

  • CameraCaptureSession概述
  • CameraCaptureSession.StateCallback概述
  • CameraCaptureSession.StateCallback状态转换
  • CameraCaptureSession API介绍

视频在线观看:

加入知识星球与更多Camera同学交流

  • 星球名称:深入浅出Android Camera
  • 星球ID: 17296815

CameraCaptureSession概述

CameraCaptureSession概述

配置好的一次会话,用于从Camera获取图像,或者reprocess图像。

可能需要几百毫秒才能完成Session的创建,HAL通常在这个阶段完成如下事情

  • 创建Pipeline

  • 申请Buffer

当创建新的Session时,旧有Session会被关掉,对应有onClosed回调

CameraCaptureSession.StateCallback概述

API Description
onConfigured(CameraCaptureSession session) Session创建好了,App可以通过它来向底层送CaptureRequest。 如果有CaptureRequest正在等待被处理,接下来onActive会被调用,否则onReady会被调用。
onConfigureFailed(CameraCaptureSession session) Session创建失败了,可能配置的Surface size不支持,或者Surface数量配置太多了
onSurfacePrepared(CameraCaptureSession session, Surface surface) 某一个Surface预分配Buffer完成后会调用该回调,通过CameraCaptureSession.prepare(Surface)对buffer进行预分配。
onReady(CameraCaptureSession session) 当Session没有request处理时调用。
onActive(CameraCaptureSession session) 当Session开始处理request时调用。
onCaptureQueueEmpty(CameraCaptureSession session) 当Input Capture Request Queue空了后调用。如果有设置repeating request,则会转去向HAL送repeating request了。Session第一次创建好时,该方法不会被调用。 当Input Capture Request Queue是空的时,Pipeline latency是最小的。
onClosed(CameraCaptureSession session) 该Session已经关闭。

CameraCaptureSession.StateCallback状态转换

CameraCaptureSession.StateCallback状态转换

CameraCaptureSession API介绍

API Description
capture(request, listener, handler) captureSingleRequest(request, executor, listener) 向Camera底层送一个CaptureRequest,优先级比Repeating CaptureRequest要高。
captureBurst(requests, listener, handler) captureBurstRequests(requests, executor, listener) 向Camera底层送一组CaptureRequests,优先级比Repeating CaptureRequest要高。这一组CaptureRequest中间不能被其他CaptureRequest插入进来,这正是与连续调用Capture方法的区别。
setRepeatingRequest(request, listener, handler) setSingleRepeatingRequest(request, executor, listener) 向Camera底层送一个CaptureRequest,底层会不停重复送这一个CaptureRequest。不支持Reprocess CaptureRequest,因为Reprocess CaptureRequest是通过TotalCaptureResult创建而来的。
setRepeatingBurst(requests, listener, handler) setRepeatingBurstRequests(requests, executor, listener) 向Camera底层送一组CaptureRequests,底层会不停重复送这一组CaptureRequests。不支持Reprocess CaptureRequest。
abortCaptures 以最快的速度结束当前的Requests,in-flight captures可能成功也可能失败,Input Capture Request Queue会全部清空。
stopRepeating Input Capture Request Queue清空。
close 关闭Session。当切换到新的session时或关闭CameraDevice时,建议不要调用该方法,直接调用createCaptureSession(未改变的Output Surfaces会被复用)或CameraDevice#close方法。
API Description
supportsOfflineProcessing(Surface surface) 判断指定的Surface能否支持切到Offline Session。
switchToOffline(Collection offlineSurfaces, Executor executor, CameraOfflineSession.CameraOfflineSessionCallback listener) 将指定的offlineSurfaces切换到Offline Session去处理。
isReprocessable() 判断当前Session能否处理Reprocess CaptureRequest。
getInputSurface() 获取Reprocess session的输入Surface。
getDevice() 获取当前Session绑定的Camera Device。
prepare(Surface surface) 预分配指定Surface的Buffer。会一次性申请该Surface允许的最大数量块Buffer。通常情况下,Surface里面的Buffer都是按需分配的,目的是为了减少启动时延和总体内存消耗。 通常情况下,我们可以在预览起来后,对拍照的Surface进行prepare,以优化第一次拍照性能,或者拍照过程中预览卡顿现象。
赞(2)
未经允许不得转载:极客笔记 » 第26讲 CameraCaptureSession详解

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
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介绍