您从红萌系统的媒体子系统从哪里开始?

要探索宏梦系统的媒体子系统,您应该从哪里开始?我从源目录中的应用程序下的应用程序开始,但是由于它已记录在此处,因此我将从一个更清晰的角度开始。

首先,请查看权威性介绍:https://gitee.com/openharmony/docs/blob/master/readme/Media子系统README.md从自述文件中,我们可以看到,尽管底层子系统庞大且相互交织,它面向应用程序层。

目的(原始文本)是:为多媒体应用程序开发人员提供统一的开发接口,以便开发人员可以专注于应用程序业务开发并轻松使用多媒体资源。

换句话说,大大降低了包装后的耦合度。

实际上,应用程序层仅需要实现少量的回调函数,并遵循该过程即可轻松实现诸如拍照,录像和预览之类的功能。

首先让我们看一下框架和流程图,这对下一个低层次的分析很有帮助。

回头看源代码。

源代码如下:在apps / sample / camera / media / camera_sample.cpp中实现的摄像机和视频功能。

以此为起点,探索系统的多媒体框架并介绍关键组件。

根据阅读的代码,我首先整理出类图(级别有限,时间紧迫,希望您能启发我认识错误):在camera_sample.cpp的main()中,首先调用CameraKit :: GetInstance()获取CameraKit实例camKit;获取实例,然后调用camKit-》 GetCameraIds()获取cameraID列表,遍历该列表,获取每个ID对应的摄像机的功能,并找到支持指定目标大小的cameraID。

使用CameraKit实例调用camKit-》 CreateCamera(camId,CamStateMng,eventHdlr)来构造相机。

以下是相关的类及其关系。

从关系图可以看出,CameraManager聚集在CameraKit中,实际上是由CameraManagerImpl继承和扩展的。

CameraManager拥有CameraManagerImpl类的实例,即cameraManagerImpl,此成员完成后续的相关操作。

接下来,让我们看一下CameraManagerImpl类。

其成员包括:CameraService * cameraService_;该成员是一个密钥,在内部进行聚合:CameraDevice * device_ = nullptr; CameraAbility * ability_ = nullptr; CameraServiceCallback * cameraServiceCb_ = nullptr;其中:CameraAbility类型的capability_用于描述CameraService的功能;在构造CameraManagerImpl的实例时,使用CameraServiceCallback类型的cameraServiceCb_初始化CameraService并处理相机状态更改; CameraDevice类型的device_成员是CameraService类的核心;以下对CameraDevice类的详细分析; CameraDevice类涉及HAL层和硬件编解码器的操作。

由于底层是以库文件的形式封装的,因此给理解带来了某些障碍,但是您可以暂时忽略细节,而将注意力集中在框架上。

让我们深入分析所涉及的各个模块。

客服
分享
电话
服务电话:
TOP
深圳市相信过程科技有限公司❤舒先生❤欢迎您的咨询 深圳市相信过程科技有限公司❤舒先生❤欢迎您的咨询
服务电话
联系我们

    深圳市相信过程科技有限公司❤舒先生❤欢迎您的咨询