0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

鸿蒙系统的媒体子系统,从何说起呢?

电子工程师 来源:HarmonyOS社区 作者:HarmonyOS社区 2021-01-13 09:51 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

首先,看权威介绍:

https://gitee.com/openharmony/docs/blob/master/readme/媒体子系统README.md

由该readme可知,子系统虽然底层庞大且盘根错节,但是,面向应用层,其宗旨(原文)是:

旨在为多媒体应用开发者开发者提供统一的开发接口,使得开发者可以专注于应用业务的开发,轻松使用多媒体的资源。

也就是说,封装之后的耦合程度大大降低了。实际上,应用层仅需实现少量回调函数并按流程操作,即可轻松实现诸如拍照、录像、预览等功能。

我们首先来一下浏览框架及流程图,有助于接下来的底层分析。

26a9d634-5146-11eb-8b86-12bb97331649.png

26cc4c78-5146-11eb-8b86-12bb97331649.png

回看源码。源码如下applications/sample/camera/media/camera_sample.cpp

中实现的拍照、录像功能,以此为起点,探究一下系统的多媒体框架,并介绍关键组件。

根据对代码的阅读,我先将类图大体上整理出来(水平有限,且时间仓促,错误之处望各位不吝赐教):

26f5fcf8-5146-11eb-8b86-12bb97331649.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层及硬件编解码器的操作,由于底层被封装为库文件的形式,给理解带来的一定的障碍,不过可以暂时先忽略细节,把焦点放到框架上,接下来对其涉及的各个模块做深入分析。

责任编辑:lq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 解码器
    +关注

    关注

    9

    文章

    1204

    浏览量

    42899
  • 封装
    +关注

    关注

    128

    文章

    9157

    浏览量

    147977
  • 鸿蒙系统
    +关注

    关注

    183

    文章

    2642

    浏览量

    69388
  • OpenHarmony
    +关注

    关注

    31

    文章

    3928

    浏览量

    20741

原文标题:OpenHarmopny的媒体子系统_1

文章出处:【微信号:HarmonyOS_Community,微信公众号:电子发烧友开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    鸿蒙系统对手机市场会产生怎样的影响?现在汽车是不是也用上鸿蒙系统了?

    鸿蒙系统对手机市场会产生怎样的影响?现在汽车是不是也用上鸿蒙系统了?
    发表于 12-04 20:47

    弱电智能化中究竟有多少个子系统

    ,每个子系统都承担着特定的功能,共同为建筑提供全面的智能化服务。随着技术的不断进步,弱电智能化系统子系统也在不断发展和完善。那么,弱电智能化中究竟有多少个子系统
    的头像 发表于 11-24 09:57 290次阅读
    弱电智能化中究竟有多少个<b class='flag-5'>子系统</b>?

    基于 ROS + ADI 芯片方案 的 人形机器人子系统级BOM清单(以腿部子系统为例)

    基于 ROS + ADI 芯片方案 的 人形机器人子系统级BOM清单 (以 腿部子系统 为例),包括核心感知、执行与通信模块,配合主控系统通过 ROS2 实现分布式控制与状态反馈。 一、腿部
    的头像 发表于 06-17 17:06 1581次阅读

    迅为RK3568开发板新增topeet子系统-在产品中新增子系统

    build/subsystem_config.json文件中增加名为topeet的子系统,在3.4节已经新建了topeet 文件夹存放子系统代码。添加 topeet 子系统进行一个登记,说明
    发表于 06-16 10:43

    迅为RK3568开发板驱动指南GPIO子系统GPIO子系统API函数的引入

    迅为RK3568开发板驱动指南GPIO子系统GPIO子系统API函数的引入
    的头像 发表于 05-29 14:05 856次阅读
    迅为RK3568开发板驱动指南GPIO<b class='flag-5'>子系统</b>GPIO<b class='flag-5'>子系统</b>API函数的引入

    RK3568驱动指南|第十二篇 GPIO子系统-第135章 GPIO子系统与pinctrl子系统相结合实验

    RK3568驱动指南|第十二篇 GPIO子系统-第135章 GPIO子系统与pinctrl子系统相结合实验
    的头像 发表于 05-23 13:47 765次阅读
    RK3568驱动指南|第十二篇 GPIO<b class='flag-5'>子系统</b>-第135章 GPIO<b class='flag-5'>子系统</b>与pinctrl<b class='flag-5'>子系统</b>相结合实验

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-input子系统之input子系统简介

    在Linux系统中,Input子系统是一个用于处理输入设备的软件框架。它提供了一种统一的接口和机制,使得各种输入设备(如键盘、鼠标、触摸屏、游戏手柄等)能够与Linux系统进行交互。Input
    发表于 04-15 10:42

    飞凌嵌入式ElfBoard ELF 1板卡-input子系统之input子系统简介

    在Linux系统中,Input子系统是一个用于处理输入设备的软件框架。它提供了一种统一的接口和机制,使得各种输入设备(如键盘、鼠标、触摸屏、游戏手柄等)能够与Linux系统进行交互。Input
    发表于 04-15 10:27

    飞凌嵌入式ElfBoard ELF 1板卡-Pinctrl和GPIO子系统之GPIO子系统

    GPIO(General Purpose Input/Output)子系统是用于控制和管理通用输入/输出引脚的一部分。它提供了一种标准化的方式来访问和操作硬件平台上的GPIO引脚,使开发人员能够通过
    发表于 03-24 15:41

    飞凌嵌入式ElfBoard ELF 1板卡-Pinctrl和GPIO子系统之Pinctrl子系统

    pinctrl(Pin Control)子系统是Linux内核中的一个模块化子系统,用于管理和控制硬件引脚(Pin)的配置和功能。它提供了一种统一的接口,使驱动程序可以对硬件引脚进行灵活的配置和控制
    发表于 03-22 09:23

    【「鸿蒙操作系统设计原理与架构」阅读体验】01-初始华为鸿蒙

    非常有幸能够获得发烧友的华为鸿蒙系统书籍的阅读资格,自己从事嵌入式软件多年,但是对于操作系统的了解还是比较少的,一直从事MCU的部分开发任务,近两年随着中美关系的紧张化,国产化的操作系统
    发表于 01-25 11:05

    云天励飞DeepEdge10芯片与国产鸿蒙操作系统完成适配

    日前,DeepEdge10芯片已完成国产鸿蒙操作系统的适配。目前已构建适配鸿蒙的芯片编译平台框架,完成图形等子系统的适配。基于DeepEdge10的
    的头像 发表于 01-24 10:14 1734次阅读

    详解deepin 25 Preview的Distrobox子系统

    为解决根社区仓库部分软件包缺失,或版本不满足用户需求的问题,deepin 结合 Distrobox 方案,在商店上架了 Debian、Ubuntu、Arch Linux、 Fedora 子系统镜像
    的头像 发表于 01-24 09:15 2047次阅读
    详解deepin 25 Preview的Distrobox<b class='flag-5'>子系统</b>

    开源鸿蒙系统外设指纹仪模块功能演示#OpenHarmony

    鸿蒙系统
    深圳市视美泰技术股份有限公司
    发布于 :2024年12月17日 10:45:58

    开源鸿蒙系统外设身份证模块读取信息演示 #OpenHarmony

    鸿蒙系统
    深圳市视美泰技术股份有限公司
    发布于 :2024年12月17日 10:45:11