Camera2概览

作者: yongbaoqiji | 来源:发表于2023-11-23 18:34 被阅读0次

    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 负责查询和建立相机连接的系统服务:

    • 获取相机 ID(前后摄等)。
    • 获取CameraCharacteristics 实例。
    • 根据指定的相机 ID连接相机设备。

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

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

    • 创建 CameraCaptureSession。
    • 创建 CaptureRequest。
    • 开关和监听相机设备的状态,例如断开连接、开启成功和开启失败等。

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

    • 相机的拍摄请求基于Session实例并通过CameraRequest为载体进行,包含Capture(一次),Burst(多次),Repeat(重复)三种模式进行请求。
    • 相机的CameraRequest状态通过CaptureCallback通知到客户端

    2. Camera2管道

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

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

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

    相关文章

      网友评论

        本文标题:Camera2概览

        本文链接:https://www.haomeiwen.com/subject/migiwdtx.html