OpenHarmony标准系统-HDF框架之音频驱动开发

article/2025/6/20 10:01:09

请添加图片描述

文章目录

  • 引言
  • OpenHarmony音频概述
  • OpenHarmony音频框图
  • HDF音频驱动框架概述
  • HDF音频驱动框图
  • HDF音频驱动框架分析之音频设备驱动
  • HDF音频驱动框架分析之supportlibs实现
  • HDF音频驱动框架分析之hdi-passthrough实现
  • HDF音频驱动框架分析之hdi-bindev实现
  • HDF音频驱动加载过程
  • HDF音频驱动播音流程分析
  • HDF音频驱动录音流程分析
  • HDF音频驱动实现总结


引言

OpenHarwony操作系统为了做到给干行百业(教育、金融、工业等)提供全场景(移动办公、社交通信运动健康等)业务能力,达到设备快速互联,硬件互助,资源共享:统一OS,,一次开发多端弹性部署的目标。在此背景下OpenHarwony提出在传统的单设备系统能力基础上,基于同一套系统能力、适配多种终端形态的分布式理念,并且内核层、系统服务层、框架层和应用层做了全新的设计与开发。

内核层作为OpenHarwony最底层设计,包括支持多内核以及全新硬件驱动框架(HDF)。同时随着电话被发明应用到如今的智能语音等等,音频应用的形态和场景也是越来越丰富。在这两个大背景下,音频需要支撑从轻设备到富设备应用需求,所以OpenHarmony下基于HDF驱动框架的音频驱动实现也存在多种方式:
1.轻设备直驱
2.富设备用户态驱动
3.富设备内核态驱动


OpenHarmony音频概述

根据OpenHarwony 系统的自下而上的层次结构划分:内核层、系统服务层、框架层和应用层。下面简要概述为实现OpenHarmony音频功能,各个层次做了哪些工作。
内核层包含两方面,内核子系统和驱动子系统。这层主要以HDF驱动框架为基础实现音频codec驱1)动,audi0 HDI接口的封装。由于产品形态和解决方案的多样化,音频codec的驱动方式也分用户态驱动方式和内核态驱动方式来实现。音频codec驱动工作后需要对硬件资源进行统一抽象封装,对上层暴露统一的音频接口,这样做的目的就是符合音频规范化操作,保证生态良性发展。2)系统服务层主要是通过PulseAudio框架对audi0 HDl的调用来获取音频驱动能力。之后基于PulseAudio框架实现AudioSustewManager和AudioServiceClient,前者对音频服务进行管理,对音频流进行管理。最后napi实现,并且sa_main会根据sa_profile会将商频的SA(system ability)拉起。3)框架层的abilitu框架和ui框架等就会根据系统层提供的音频能力进行相应的调用,实现应用的FA(Feature Ability)和PA(Particle Ability).4)应用层则是根据应用需求和场景调用相应的FA和PA进行打包生成.


http://www.hkcw.cn/article/ygCskvrwvw.shtml

相关文章

C#WinForm程序时方法很多时Form.cs文件会很长,如何分别写入多个文件,partial class的作用体现出来了。

右键->添加->类 类文件名称为 FormButtonClick.cs 双击button3,将Form1里button3的Click事件处理方法拷贝到FormButtonClick.cs里面。

关于win10系统中环境变量path变成一行显示的问题

怎么把环境变量从一行显示恢复成列表显示(原文链接在最下面,感谢) 一行显示(调整了环境变量把C:\Windows\System64开头的挪到了后面或者删了就会这样): 只需在开头加上 C:\Windows\System64; 重新打开 就恢复成列表显示了 关于wi…

NW969NW978美光闪存颗粒NW980NW984

NW969NW978美光闪存颗粒NW980NW984 技术解析:NW969、NW978、NW980与NW984的架构创新 美光(Micron)的闪存颗粒系列,尤其是NW969、NW978、NW980和NW984,代表了存储技术的前沿突破。这些产品均采用第九代3D TLC&#xf…

python打卡训练营打卡记录day41

知识回顾 数据增强卷积神经网络定义的写法batch归一化:调整一个批次的分布,常用与图像数据特征图:只有卷积操作输出的才叫特征图调度器:直接修改基础学习率 卷积操作常见流程如下: 1. 输入 → 卷积层 → Batch归一化层…

某航参数逆向及设备指纹分析

文章目录 1. 写在前面2. 接口分析3. 加密分析4. 算法还原5. 设备指纹风控分析与绕过 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享…

电子电器架构 --- OTA测试用例分析(上)

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…

方案精读:42页华为企业组织活力设计方案【附全文阅读】

该文档聚焦华为企业组织活力设计,核心内容为:在非线性时代,方向未必完全正确时,组织活力是企业成功关键,可通过创新与柔性激发。以熵增、熵减为理论基础,华为活力引擎模型包含宏观(厚积薄发、开放合作对抗熵增)与微观(人力资源管理对抗个人惰怠)。 实践上从三层面激活…

双目相机深度的误差分析(基线长度和相机焦距的选择)

全文基于针孔模型和基线水平放置来讨论 影响双目计算深度的因素: 1、基线长度:两台相机光心之间距离2、相机焦距(像素): f x f_x fx​(或 f y f_y fy​)为焦距 f f f和一个缩放比例的乘积。在…

Namespace 命名空间的使用

名字空间:划分更多的逻辑空间,有效避免名字冲突的问题 1.什么是命名空间 名字命名空间 namespace 名字空间名 {...} // 名字空间 n1 域 namespace n1 {// 全局变量int g_money 0;void save(int money){g_money money;}void pay(int money){g_money - m…

力扣热题100之翻转二叉树

题目 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 代码 方法一:递归 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # …

simulink mask的使用技巧

1.mask界面布局 1.1如何调整控件的位置和控件大小? 反正2020a是调不了, 找了好久,只能是调布局,例如你要调成下面这样: 第一个控件的iTem location属性选择New row 后面跟着的几个和第一个同一行的空间属性选择Cu…

第12讲、Odoo 18 权限控制机制详解

目录 引言权限机制概述权限组(Groups)访问控制列表(ACL)记录规则(Record Rules)字段级权限控制按钮级权限控制菜单级权限控制综合案例:多层级权限控制最佳实践与注意事项总结 引言 Odoo 18 提…

AIGC学习笔记(8)——AI大模型开发工程师

文章目录 AI大模型开发工程师007 LangChain之Model IO模块1 Model IO核心概念2 Model IO代码实战什么是LCEL?ModelModel的分类LLMsChatModel PromptPrompt templatesExample selectorsOutput parsers AI大模型开发工程师 007 LangChain之Model IO模块 1 Model IO核…

Java 文件操作 和 IO(5)-- 综合案例练习 -- 示例一

题目描述:扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包含目录),并且后续询问用户是否要删除该文件 文章目录 题目描述:扫描指定目录,并找到名称中包含指定字符的所有普通文件&…

Leetcode 465. 最优账单平衡

1.题目基本信息 1.1.题目描述 给你一个表示交易的数组 transactions ,其中 transactions[i] [fromi, toi, amounti] 表示 ID fromi 的人给 ID toi 的人共计 amounti $ 。 请你计算并返回还清所有债务的最小交易笔数。 1.2.题目地址 https://leetcode.cn/pro…

【沉浸式求职学习day51】【发送邮件】【javaweb结尾】

沉浸式求职学习 邮件发送原理及实现1.概述2.简单邮件3.复杂邮件 网站注册发送邮件功能实现 邮件发送原理及实现 1.概述 传输协议 SMTP协议 发送邮件: 我们通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。POP3协议 接收邮件&#…

标题:2025海外短剧爆发年:APP+H5双端系统开发,解锁全球流量与变现新大陆

描述: 2025年出海新风口!深度解析海外短剧系统开发核心(APPH5双端),揭秘高效开发策略与商业化路径,助您抢占万亿美元市场! 全球娱乐消费模式正在剧变。2025年,海外短剧市场已从蓝海…

uni-app学习笔记十六-vue3页面生命周期(三)

uni-app官方文档页面生命周期部分位于页面 | uni-app官网。 本篇再介绍2个生命周期 1.onUnload:用于监听页面卸载。 当页面被关闭时,即页面的缓存被清掉时触发加载onUnload函数。 例如:在demo6页面点击跳转到demo4,在demo4页面回退不了到d…

钉钉红包性能优化之路

一、业务背景 请客红包、小礼物作为饿了么自研的业务产品,在钉钉的一方化入口中常驻,作为高UV、PV的toB产品,面对不同设备环境的用户,经常会偶尔得到一些用户反馈,如【页面白屏太久了】、【卡住了】等等,本…

鲲鹏Arm+麒麟V10 K8s 离线部署教程

针对鲲鹏 CPU 麒麟 V10 的离线环境,手把手教你从环境准备到应用上线,所有依赖包提前打包好,步骤写成傻瓜式操作指南。 一、环境规划# 准备至少两台机器。 架构OS作用Arm64任意,Mac 也可以下载离线包Arm64麒麟 V10单机部署 K8s…