没有合适的资源?快使用搜索试试~ 我知道了~
Android P Audio系统笔记:AudioPolicy&AudioFlinger初始化
23 下载量 109 浏览量
2021-01-20
08:40:25
上传
评论 3
收藏 206KB PDF 举报
温馨提示
试读
4页
AudioPolicy&AudioFlinger初始化总体框架初始化步骤简介初始化步骤详细流程分析1、loadConfig()2、initialize()2.1、初始音频路由引擎2.2、加载so 并且打开设备节点2.3、打开输出流 总体框架 AudioFlinger和AudioPolicy两者是Android Audio框架层最主要的两个服务,他们两个是Android框架层的本地服务,在init.rc中启动; AudioPolicyManager负责音频策略定制者,说白了就相当于Audio系统的司令。 AudioFlinger负责与底层audio alsa进行交互的实现者,那么它就是Audio
资源推荐
资源详情
资源评论
Android P Audio系统笔记:系统笔记:AudioPolicy&AudioFlinger初始化初始化
AudioPolicy&AudioFlinger初始化初始化总体框架初始化步骤简介初始化步骤详细流程分析1、loadConfig()2、initialize()2.1、初始音频路由引擎2.2、加载so 并且打开设备节点2.3、打开
输出流
总体框架总体框架
AudioFlinger和AudioPolicy两者是Android Audio框架层最主要的两个服务,他们两个是Android框架层的本地服务,在init.rc中启动;
AudioPolicyManager负责音频策略定制者,说白了就相当于Audio系统的司令。
AudioFlinger负责与底层audio alsa进行交互的实现者,那么它就是Audio系统的军官,干苦力的;
总体框架:
两个服务都属于audioserver进程,严格意义上来说audioserver通过init进程fork出来的,所以它是Linux系统中的一个进程。
AudioFlinger:media.audio_flinger
AudioPolicyService:media.audio_policy
//编译后生成的so命名会根据module name 以及soc名字生成e.g. audio.[module name].[soc name] //如IMX8的:audio.primary.imx8.so
Speaker
Speaker
//输出混音线程
//输出设备节点
//音频路由
2、、initialize()
好了,上面的都是开胃菜,这个才是硬菜。
来,看下这个大概步骤,心中有谱,码海不慌。
主要是三个步骤:
2.1初始音频路由引擎初始音频路由引擎
audio_policy::EngineInstance *engineInstance = audio_policy::EngineInstance::getInstance();
2.2、加载、加载so 并且打开设备节点并且打开设备节点
mpClientInterface->loadHwModule(hwModule->getName())
2.3、打开输出流、打开输出流
status_t status = outputDesc->open(nullptr, profileType, address, AUDIO_STREAM_DEFAULT, AUDIO_OUTPUT_FLAG_NONE,&output);
怕你不信,所以贴了部分代码出来:
//frameworks/av/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
status_t AudioPolicyManager::initialize() {
//1、初始音频路由引擎
// Once policy config has been parsed, retrieve an instance of the engine and initialize it.
audio_policy::EngineInstance *engineInstance = audio_policy::EngineInstance::getInstance();
if (!engineInstance) {
ALOGE("%s: Could not get an instance of policy engine", __FUNCTION__);
return NO_INIT;
}
// Retrieve the Policy Manager Interface
mEngine = engineInstance->queryInterface();
if (mEngine == NULL) {
ALOGE("%s: Failed to get Policy Engine Interface", __FUNCTION__);
return NO_INIT;
}
mEngine->setObserver(this);
status_t status = mEngine->initCheck();
for (const auto& hwModule : mHwModulesAll) {
//2、加载so 并且打开设备节点
hwModule->setHandle(mpClientInterface->loadHwModule(hwModule->getName()));
mHwModules.push_back(hwModule);
// open all output streams needed to access attached devices
// except for direct output streams that are only opened when they are actually
// required by an app.
// This also validates mAvailableOutputDevices list
for (const auto& outProfile : hwModule->getOutputProfiles()) {
//经过一系列有效判断后 创建输出相关参数
sp outputDesc = new SwAudioOutputDescriptor(outProfile,
mpClientInterface);
资源评论
weixin_38584642
- 粉丝: 5
- 资源: 947
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于MATLAB光学三维重构中的菱形展开算法 .rar
- 基于MATLAB光学三维重构中的时间相位展开算法+文档.rar
- 基于matlab实现的 Crust 算法的三维点云重构物体表面程序.rar
- 基于matlab的小波包分解应用于机械振动信号的故障分析.rar
- 基于matlab实现的hough变换检测直线,检测直线之后用颜色标记出来.rar
- ESP8266通过MQTT协议将温湿度数据传输至OnenNet云平台源码+详细说明.zip
- 基于matlab实现的 分析机械力学中的工程振动问题,实例1 .rar
- Java期末考试复习笔记
- 基于matlab实现的NSGA2遗传算法的地铁隧道上方基坑工程优化设计.rar
- 图解迪杰斯特拉(Dijkstra)最短路径算法.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功