android audio 框架,AAudio 和 MMAP

AAudio 是 Android 8.0 版本中引入的一种音频 API。Android 8.1 版本提供了增强功能,在与支持 MMAP 的 HAL 和驱动程序结合使用时,可缩短延迟时间。本文档说明了在 Android 中支持 AAudio 的 MMAP 功能所需的硬件抽象层 (HAL) 及驱动程序更改。

如欲支持 AAudio MMAP,需执行以下操作:

报告 HAL 的 MMAP 功能

在 HAL 中实现新功能

为“专有”模式缓冲区实现自定义 ioctl()(可选)

提供一个额外的硬件数据路径

设置用于启用 MMAP 功能的系统属性

注意:请仅在 Android O MR1 或更高版本上启用 MMAP 功能。

AAudio 架构

AAudio 是一种新的本地 C API,可提供 Open SL ES 的替代方案。它使用“构建器”设计模式来创建音频流。

AAudio 提供了一个低延迟数据路径。在“专有”模式下,使用该功能可将客户端应用代码直接写入与 ALSA 驱动程序共享的内存映射缓冲区。在“共享”模式下,MMAP 缓冲区由 AudioServer 中运行的混音器使用。在“专有”模式下,由于数据会绕过混音器,延迟时间会明显缩短。

在“专有”模式下,服务可从 HAL 请求 MMAP 缓冲区并管理资源。MMAP 缓冲区将在 NOIRQ 模式下运行,因此没有共享的读/写计数器来管理缓冲区的访问权限。相反,客户端会维护硬件的计时模型,并预测将在何时读取缓冲区。

在下图中,我们可以看到脉冲编码调制 (PCM) 数据通过 MMAP FIFO 向下流入 ALSA 驱动程序。AAudio 服务会定期请求时间戳,然后通过原子消息队列将其传递给客户端的计时模型。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值