1. 相机组件简介
相机组件支持相机业务的开发,开发者可以通过已开放的接口实现相机硬件的访问、操作和新功能开发,最常见的操作如:预览、拍照和录像等
CameraService服务作为相机组件的重要一环,对上为app层提供IPC接口,对下完成CameraDevice设备创建以及会话管理等。
1.1 相机组件的代码在openharmony中的位置
相机组件的代码位于【foundation/multimedia/camera_standard】目录下
代码结构如下
├── bundle.json
├── figures
├── frameworks camera frameworks部分,支持js和native转换
│ ├── js
│ └── native
├── hisysevent.yaml
├── interfaces CameraService接口
│ ├── inner_api
│ └── kits
├── LICENSE
├── OAT.xml
├── README.md
├── README_zh.md
├── sa_profile CameraService进程加载配置文件
│ ├── 3008.xml
│ └── BUILD.gn
└── services CameraService启动相关
├── camera_service
└── etc
1.2 CameraService在系统中的位置
相机服务整体架构如下:
可以看到在整个相机组件中,把相机功能抽象为CaptureSession(管理生命周期、参数配置、输入管理、输出管理)、CameraInput(设备查询、设备控制、设备监听)和CameraOutput(元数据输出、流输出和状态控制)。
而CameraService就是将这些功能如何由camera app传达给camera host服务的中间人,以及Camera Host服务反馈的消息转发给Camera app。
所以下面的文章主要来看看CameraService实现了哪些接口,以及CameraService的启动流程
2. CameraService Native实现IPC通信需要实现的主要重要接口
2.1 icamera_service接口
实现ICameraService接口,继承于IRemoteBroker,定义描述符、业务函数和消息码
接口函数代码如下
【foundation\multimedia\camera_standard\services\camera_service\binder\base\include\icamera_service.h】
class ICameraService : public IRemoteBroker {
public:
virtual int32
virtual int32_t CreatePhotoOutput(const sptr<OHOS::IBufferProducer> &producer, int32_t format,
sptr<IStreamCapture> &photoOutput) = 0;
virtual int32_t CreatePreviewOutput(const sptr<OHOS::IBufferProducer> &producer, int32_t format,
sptr<IStreamRepeat> &previewOutput) = 0;
virtual int32_t CreateCustomPreviewOutput(const sptr<OHOS::IBufferProducer> &producer, int32_t format,
int32_t width, int32_t he_t CreateCameraDevice(std::