要探究鸿蒙系统的媒体子系统,从何说起呢?我是从源码目录下 applications 下的应用开始的,不过既然在这里记录下来,就从更清晰的角度来切入。
首先,看权威介绍:
https://gitee.com/openharmony/docs/blob/master/readme/媒体子系统README.md
由该readme可知,子系统虽然底层庞大且盘根错节,但是,面向应用层,其宗旨(原文)是:
旨在为多媒体应用开发者开发者提供统一的开发接口,使得开发者可以专注于应用业务的开发,轻松使用多媒体的资源。
也就是说,封装之后的耦合程度大大降低了。实际上,应用层仅需实现少量回调函数并按流程操作,即可轻松实现诸如拍照、录像、预览等功能。
我们首先来一下浏览框架及流程图,有助于接下来的底层分析。
回看源码。源码如下applications/sample/camera/media/camera_sample.cpp
中实现的拍照、录像功能,以此为起点,探究一下系统的多媒体框架,并介绍关键组件。
根据对代码的阅读,我先将类图大体上整理出来(水平有限,且时间仓促,错误之处望各位不吝赐教):
在 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层及硬件编解码器的操作,由于底层被封装为库文件的形式,给理解带来的一定的障碍,不过可以暂时先忽略细节,把焦点放到框架上,接下来对其涉及的各个模块做深入分析。
责任编辑:lq
-
解码器
+关注
关注
9文章
1143浏览量
40774 -
封装
+关注
关注
126文章
7933浏览量
143054 -
鸿蒙系统
+关注
关注
183文章
2636浏览量
66403 -
OpenHarmony
+关注
关注
25文章
3725浏览量
16372
原文标题:OpenHarmopny的媒体子系统_1
文章出处:【微信号:HarmonyOS_Community,微信公众号:电子发烧友开源社区】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论