[文章]【HarmonyOS HiSpark AI Camera试用连载 】鸿蒙系统之媒体子系统初探

阅读量0
0
0


要探究鸿蒙系统的媒体子系统,从何说起呢?我是从源码目录下 applications 下的应用开始的,不过既然在这里记录下来,就从更清晰的角度来切入。

首先,看权威介绍:
https://gitee.com/openharmony/docs/blob/master/readme/媒体子系统README.md
由该readme可知,子系统虽然底层庞大且盘根错节,但是,面向应用层,其宗旨(原文)是:
        旨在为多媒体应用开发者开发者提供统一的开发接口,使得开发者可以专注于应用业务的开发,轻松使用多媒体的资源。
也就是说,封装之后的耦合程度大大降低了。实际上,应用层仅需实现少量回调函数并按流程操作,即可轻松实现诸如拍照、录像、预览等功能。
我们首先来一下浏览框架及流程图,有助于接下来的底层分析。
框架.png
流程.png


回看源码。
源码目录下 applications/sample/camera/media/camera_sample.cpp 中实现的拍照、录像功能,以此为起点,探究一下系统的多媒体框架,并介绍关键组件。
根据对代码的阅读,我先将类图大体上整理出来(水平有限,且时间仓促
,错误之处望各位不吝赐教):
类图.png


在 camera_sample.cpp 的 main() 中,首先调用 CameraKit::GetInstance() 获取一个 CameraKit 实例 camKit;
得到实例后继而调用 camKit->GetCameraIds() 获取 camera ID 列表,遍历列表,获取每个ID的对应的camera的ability,找到其中支持指定目标大小的camera ID。
通过 CameraKit 实例调用 camKit->CreateCamera(camId, CamStateMng, eventHdlr) 来构造 camera,以下是涉及的相关类及其关系。

由关系图可知,CameraKit 中聚合了 CameraManager,实际上是由 CameraManagerImpl 继承并拓展了该类,CameraManager 内部持有CameraManagerImpl类的实例,即cameraManagerImpl,后续的相关操作由该成员来完成。
紧接着来看CameraManagerImpl类,其成员中有:
        CameraService *cameraService_;
该成员是一个关键,它内部聚合了:
        CameraDevice *device_ = nullptr;
        CameraAbility *ability_ = nullptr;
        CameraServiceCallback *cameraServiceCb_ = nullptr;
其中:
CameraAbility 类型的 ability_ 用来描述CameraService的能力;
CameraServiceCallback 类型的 cameraServiceCb_ 用来在构造CameraManagerImpl实例时候对CameraService做一些初始化工作及camera状态改变的处理;
CameraDevice 类型的 device_ 成员是类 CameraService的核心;下面详细分析CameraDevice类;

CameraDevice类涉及到了HAL层及硬件编***,由于底层被封装为库文件的形式,给理解带来的一定的障碍,不过可以暂时先忽略细节,把焦点放到框架上,接下来对其涉及的各个模块做深入分析。

回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友