要探究鸿蒙系统的媒体子系统,从何说起呢?我是从源码目录下 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层及硬件编解码器的操作,由于底层被封装为库文件的形式,给理解带来的一定的障碍,不过可以暂时先忽略细节,把焦点放到框架上,接下来对其涉及的各个模块做深入分析。
中国光伏电池专利申请量全球第一,行业年均增速2.0%
M8812高性价比可编程直流电源
Buck-Boost输入与输出之间的关系?
完整黑盒测试的五个阶段与操作步骤
闪电网络流量分析引发了什么问题
鸿蒙系统的媒体子系统,从何说起呢?
我们离实体机器人有多近
什么是量子图像传感器(QIS)?
简单认识功率二极管
美国次制裁5家中国企业 ,直指中国超级计算机!
MAX44284检流放大电路的介绍及设计时需注意的问题
苹果方向迷失 库克屈从利益背叛用户 苹果魅力加消退产品销量遭遇断崖式下滑
极狐GitLab一体化 DevOps平台 助力派拉软件守护千家企业安全
区块链行业创业时常见的几个误区阐述
STM32F103C8T6读写内部flash
电气控制线路图的画法及特点
DFRobot初级套件介绍
基于成像亮度计的路面亮度测试方法研究
云计算是什么?为什么要叫云计算?云计算服务有什么?
土壤肥料检测仪的详细介绍