一、简介
当前,开源在科技进步和产业发展中发挥着越来越重要的作用,OpenAtom OpenHarmony(简称“OpenHarmony”)赋予了开发者孕育创新的种子,也为数字化产业发展开辟了一片土壤。深开鸿是开源的坚定践行者,基于OpenHarmony聚焦智能物联网操作系统(KaihongOS)技术研发与持续创新。
OpenHarmony Camera是多媒体子系统中的一个重要模块,Camera提供了OpenHarmony相机的预览、拍照和录像等功能。作为深开鸿的一名OS系统开发工程师,我长期致力于OpenHarmony框架层的研发工作,在OpenHarmony相机模块的拍照、预览和录像方面积累了一些经验,我将围绕着这三个核心功能对OpenHarmony Camera源码进行详细的分析。
二、OpenHarmony相机子系统
(1)系统简介
相机组件支持相机业务的开发,开发者可以通过已开放的接口实现相机硬件的访问、操作和新功能开发,最常见的操作如:预览、拍照和录像等。
架构图
相机框架中主要包含会话管理、设备输入和数据输出,设备的输入和数据的输出配置都是在采集会话中完成,会话管理模块管理相机设备输入和数据输出。应用层在调用相机功能时,首先需要创建采集会话,在配置会话的过程中会将创建的设备输入和数据输出添加到采集会话中。
相机框架中几个重要的概念
会话管理:对相机采集的生命周期、参数配置、输入和输出的管理。
设备输入:主要的输入设备是相机,对相机的输入参数进行设置,比如设置闪光灯模式等。
数据输出:相机的输出有拍照输出、预览输出和录像输出,分别对应三个不同的类,所以上层需要根据不同的场景创建出不同的数据输出。
相机底层功能图
相机驱动框架模型对上实现相机HDI接口,对下实现相机Pipeline模型,管理相机各个硬件设备。底层硬件提供了相机设备功能,比如相机的设备管理,包括相机设备枚举、相机设备能力查询、流的创建管理以及图像的捕获。
(2)功能模块
会话管理模块
会话管理模块的主要功能是配置会话的输入(设备输入)和输出(数据的输出),以及控制会话的开始和结束,主要接口有:
设备输入模块
相机输入主要是给会话设置设备的输入,设备输入模块可以设置和获取输入设备的参数,比如闪光灯模式、缩放比例、对焦模式等,主要接口有:
数据输出模块
数据输出模块根据不同的场景分为拍照输出、预览输出和录像输出。其中拍照的输出是通过PhotoOutput的Capture接口来提供拍照功能,预览和录像则是通过StreamRepeat提供的接口实现。主要接口有: