Camera framework 详解

前面一章有对camera APP接口的使用流程有个整体的概况和描述,那今天则对这些接口进行一个整体架构上的介绍和总结。

    首先,我们要知道上一章所介绍的camera APP的接口调用流程用的接口都是android定义的,那这些接口即属于camera framework这一层。

    接着,我们对上一章涉及的一些类和Callback做一些总结,以便你更方便的了解和熟悉它们,能更好的有个整体的印象。

    1)首先是CameraManager,我们需要知道它是一个单例,也就是只会存在一个CameraManager的实体对象,从前一章有看到,这个类只有在openCamera的时候会被用到,那它主要的职责就是管理所有的camera,比如去打开某个指定了索引id的camera,比如查询具体某个索引id的camera静态信息,比如camera的sensor相关信息(分辨率、帧率)、模组的信息(lens,光圈),可能还有一些例如flash(闪光灯)之类的信息,都可以通过这个类的接口去获取。

    2)那接下来我们看下CameraDevice类,它是基类,真正的实现在CameraDeviceImpl类里,对于app来说,每打开一个逻辑camera,就会创建一个CameraDeviceImpl的对象,当然这里是逻辑camera,如果你打开的是一个虚化的双摄拍照模式,这里的逻辑camera也是只有一个CameraDeviceImpl的实体对象。那它的内容顾名思义,也就是在camera层级类的接口,都在这个基类/实现类里实现,比如前面提到的configureStream和createStream,也就是整个camera的打开后的数据流是怎么配置的,每条数据流的图像分辨率、帧率、以及图像的处理方式都是在这个基类/实现类里去实现,当然还有获取camera的一些基本信息,比如当前数据流的一些信息(分辨率、帧率)也是可以通过CameraDevice类里的接口来调用获取。

    3)最后就是CameraCaptureSession类,同理它也是个基类,真正的实现在CameraCaptureSessionImpl类,对于app来说,每打开一个逻辑camera后,有且只能创建一个CameraCaptureSessionImpl的对象,如果要创建新的CameraCaptureSessionImpl需要destroy掉以前的CameraCaptureSessionImpl,创建的CameraCaptureSessionImpl对象即configureStream的实现,代表一组数据流的集合。那基于数据流的操作都会放在这个类里实现,比如每帧的请求,这里android的接口把预览、拍照、视频录制都认为是一帧帧的图像请求,所以不管图像数据最终请求方式如何,这里我们都可以认为是一次图像请求,当然在一次图像请求里,可以包含多条stream的图像帧数据,比如一次图像请求包含一帧preview预览的图像帧数据,还包括拍照的jpeg图像帧数据,还可以再包含录制的图像的一帧图像数据,当然这些图像帧都可以有不同的分辨率、帧数、图像质量。另外该类里还包含了获取每个图像帧数据的metadata,metadata是android Camera里定义给每个图像中常用参数的一组键值对,比如分辨率、帧率等等都有对应的metadata,而通过metadata可以保持上层App和底层HAL实现里这些参数的匹配。

    4)前面都是App对framework层的一些接口,还有一些涉及底层调用回App的接口,这里介绍下常用的ICameraDeviceCallbacks接口,App每次请求的图像数据以及metadata参数都会通过这个接口回调给App,所以一般需要App自行实现这个接口的后处理。

    整体App和framework的介绍大概就是这么多,当然还有一些不是很常用的类比如在视频时会用到的,这里就不一一描述,当然整体的流程和使用的接口都是跟这里讲解的大同小异。

    后面会继续对framework以下进行讲解。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值