程序员

Camera2概览

2023-11-23  本文已影响0人  yongbaoqiji

Android从5.0开始支持Camera2,对于相机开发者来说,应用层可以通过Camera2获取更多的底层相机控制权限,从而为满足不同应用场景需求的的相机提供了可能。同时,不同手机厂商也陆续推出了自己的Camera接口,比如华为的CameraKit等。不管接口如何变,面对着不同厂商不同机型,可能表现不同效果的复杂的现状,但对Camera的一些核心控制及效果追求,是万变不离其宗的,比如相机图像,帧率,3A等核心内容。

如下图,Android的整个相机处理流程示意。首先,在已经处理完相机打开流程后,客户端通过比如SurfaceTexture这样的非直接上屏组件提供Surface作为相机图像的载体,并通过CaptureRequest发送到底层相机,相机底层作为生产方,在底层相机ISP完成生成好的图像后,放到对应的Surface上,此时客户端就可以通过比如SurfaceTexture的OnFrameAvaliable回调经updateTexImage拿到对应的相机纹理Id,然后进行下一步处理,同时每一帧的相机处理状态,比如测光状态,对焦状态等,通过CaptureResult状态通知到客户端。进而完成整个交互场景需求。

camera2

1. Camera2框架

相较于Camera1基于Camera进行接口调用,Camera2引入了CameraManagerCameraCharacteristicsCameraDeviceCameraCaptureSession作为主要的API。

CameraManager 负责查询和建立相机连接的系统服务:

CameraCharacteristics 用于查询支持的硬件参数,独立于相机实例:

CameraDevice 代表当前连接的相机硬件设备实例:

CameraCaptureSession 代表在对应的相机设备上创建了的 通信Pipeline 实例。

2. Camera2管道

Camera2开始采用PipeLine管道来完成应用与相机服务的通信,它按顺序处理每一帧的请求并返回请求结果给客户端。
PipeLine管道的核心就是CaptureRequest和CaptureResult。
CaptureRequest如同一个快递车,承载着客户不同的请求信息包裹行驶在PipeLine的路线上发给底层相机去处理,待处理完包裹后,通过CaptureResult将处理信息回调给客户。

CaptureRequest
这些包裹承载的信息可能是相机画面的载体Surface,对焦的请求,测光请求,闪光灯开关,曝光时间,曝光补偿,对焦区域,是否开启去抖等信息。部分摘要:

CaptureResult
CaptureResult 是每一次Capture 操作的结果,包括了一些状态信息,如闪光灯、对焦、时间戳等。

上一篇下一篇

猜你喜欢

热点阅读