android audio arch

2023-11-01

android audio arch

ALSA System on Chip(ASoC)

ASoC 驱动将一个audio子系统分成四个部分:

Machine driver, Platform driver, CPU driver以及Codec driver。

Machine 驱动

  • 将平台,CPU以及codec驱动绑定在一块
  • 实现在kernel/sound/soc/msm/<chipset.c>
  • 定义前端FE和后端BE,DAI(digital audio interface) links

platform 驱动

  • 包括了平台相关的音频数据流的传输和路由的控制
  • 被区分成FE和BE两个平台驱动

FE

  • Audio -例化PCM播放和采集,将播放的pcm数据从用户空间传递给DSP,采集是逆过程,高通使用ASM接口,实现于kernel/sound/soc/msm-pcm-q6.c
  • Voice-初始化和销毁语音电话建立,实现与kernel/sound/soc/msm-pcm-voice-v2.c
  • VoIP-初始化和销毁MVS接口在DSP和用户空间互传数据。kernel/sound/soc/msm-pcm-voip-v2.c
  • Compress offload-Compress offload 播放数据传输到DSP。kernel/sound/soc/msm-compress-q6-v2.c

BE

  • Routing-audio 通路选择,kernel/sound/soc/msm-pcm-routing-v2.c

CPU driver

分为FE和BE CPU驱动

FE

  • 提供了ALSA SoC framework需要的FE PCM设备信息,由平台驱动提供的ASoC framework和音频路由表可以指示PCM 播放/采集。
  • FE CPU DAI实现于kernel/sound/soc/msm/msm-dai-fe.c

BE

  • 根据初始化的PCM播放和采集配置DSP AFE模块对应的audio 音频端口
  • 定义了BE CPU DAI实现于kernel/sound/soc/msm/qdsp6v2/msm-dai-q6-v2.c

Codec 驱动

UserSpcace Moudles

  • Audio Hardware Abstraction Layer(AHAL)-使用tinyalsa将AudioFlinger调用映射到ASoC驱动
  • tinyalsa-kernel ASoC驱动接口,AHAL使用,提供了stream和设备管理需要的基本PCM和Mixer控制API
  • Audio Route-该模块从XML文件读取ALSA mixer 控制器,并根据AHAL设置mixer控制器。
  • Multimedia framework-StageFright  1)使用标准音频格式的播放和采集;2)和编解码库以及OpenMAX IL组件通信,实现音频编解码
  • Audio service  1)运行时服务,由system server启动,service manager 管理;2)注册intents,当接收到来自不同应用(HDMI,Bluetooth)的信息后通知Audio系统
  • Audio Flinger  1)通过libaudio, 蓝牙A2DP管理所有音频输入/输出设备, 2)将多个audio stream合成单一PCM,混合的output输出源被路由给输出设备  3) music stream播放的音量控制
  • Audio Policy Manager(APM)--1)定义了多个音频源并发的管理策略  2)设置场景(电话,音乐,系统音,通知)  3)定义了音频类型(语音,播放,ring)在何种设备上播放(Bluetooth, speaker, headset) 
  • APM的职责如下  1)管理各种输入/输出设备接口  2)管理各种输入/输出设备,mic/speaker/headphone/headset/A2DP以及Bluetooth SCO, 3)基于stream模式选择和定义合适的路由策略 4)管理每一个stream的音量

Audio Output Stream and Volume Control

  • 缺省的音频输出(primary output)使用AudioFlinger中的Mixer线程,音量和音效将在Flinger中使用
  • Lowlatency输出使用AudioFlinger中的快速mixer,音量控制在Flinger中
  • Compress offload播放使用Audio Flinger中的compress offload 线程,音量和音效在DSP中。
  • VoIP播放在AudioFlinger中的mixerThread,Volume和echo cancelation由DSP完成。

设备和流管理

Frontend DAI

  • 对用户空间作为PCM设备可见
  • 可以将Audio路由到多个BE DAI
  • Routing由用户空间mixer控制
  • PCM由ALSA直接控制
  • 定义与msm-dai-fe.c
    static struct snd_soc_dai_driver msm_fe_dais[]={
      .playback = {
         .stream_name = "Multimedia1 Playback",
         .aif_name = "MM_DL1",
         .rates
    ...
      }
    
    }

当front DAI使能时,AIF将会被使能。

代码分布

用户空间和audio相关的代码

用于调试和定制化:
<APSS_BUILD>/hardware/qcom/audio/hal/msm8974 – Contains the audio Hardware Abstraction Layer (HAL)-related code

<APSS_BUILD>/external/tinyalsa/ – Contains the code related to tinymix, tinyplay, and tinycap

<APSS_BUILD>/hardware/qcom/audio/mm-audio – Contains the implementation of QTI OMX components for the audio encoder and decoders

<APSS_BUILD>/frameworks/av/media/libstagefright/ – Contains the source code for Google’s Stagefright implementation

<APSS_BUILD>/frameworks/av/media/libmediaplayerservice/nuplayer - Contains the source code for Google’s nuplayer implementation

<APSS_BUILD>/frameworks/av/services/audioflinger/ – Contains the source code for AudioFlinger that manages audio streams from the user space

<APSS_BUILD>/vendor/qcom/proprietary/mm-audio/ – Contains the code related to the Audio Calibration Database (ACDB) driver, parsers for DTS and AC3, surround sound, SVA, etc.

<APSS_BUILD>/external/bluetooth/bluedroid/ – Contains the code related to Bluetooth® (BT) A2DP used in a QTI platform

<APSS_BUILD>/external/bluetooth/bluedroid/audio_a2dp_hw/ – Contains the A2DP audio HAL implementation

<APSS_BUILD>/hardware/libhardware/modules/usbaudio/ – Contains the USB HAL implementation for a USB dock use case

<APSS_BUILD>/hardware/qcom/audio/hal/audio_extn/:

audio_extn.c – Implements the wrapper function for audio extension features, such as FM, Dolby, Compress capture, HFP, SVA (listen), speaker protection, SSR, USB audio over headset

usb.c – Contains the HAL implementation for USB playback and record over the headset

compress_capture.c – Contains the HAL implementation for Compress capture

dolby.c – Contains the HAL implementation for the Dolby postprocessing feature

fm.c – Contains the HAL implementation for the FM playback and recording feature

hfp.c – Contains the HAL implementation for the hands-free profile feature where the MSM™ chipset can be used as as a BT headset device

listen.c – Contains the HAL implementation for the Snapdragon™ Voice Activation (SVA) feature

spkr_protection.c – Contains the HAL implementation for the speaker protection feature

ssr.c – Contains the HAL implementation for the surround sound recording feature

<APSS_BUILD>/vendor/qcom/proprietary/wfd/mm/source/framework/src/ – Contains the Wi-Fi Display (WFD) frameworks-related code; WFDMMSourceAudioSource.cpp configures the RT Proxy port via ALSA APIs and gets the PCM data from the audio layer

<APSS_BUILD>/system/core/include/system/ – Contains audio.h and audio_policy.h that contain enum definitions and inline functions used all over the code for audio in the user space

<APSS_BUILD>/frameworks/base/media/java/android/media/ – Contains .java files for audio that expose APIs that can be called by Android™ applications written in Java

内核空间代码

<APSS_BUILD>/kernel/sound/soc/msm/ – Contains the msm8994.c machine driver

<APSS_BUILD>/kernel/sound/soc/msm/qdsp6v2 – Contains the source code for the platform drivers, Frontend (FE), and Backend (BE) DAI driver, QDSP drivers for AFE, ADM, and ASM, voice driver, etc.

<APSS_BUILD>/kernel/sound/soc/soc-*.c – All the soc-*.c files provide information on the ALSA SOC framework

<APSS_BUILD>/kernel/drivers/slimbus/ – Contains the source for the SLIMbus driver

<APSS_BUILD>/kernel/arch/arm/mach-msm/qdsp6v2/ – Contains the drivers for DSP-based encoders and decoders, code for the ADSP loader, APR driver, Ion memory driver, and other utility files

<APSS_BUILD>//LINUX/android/kernel/arch/arm/boot/dts – Contains msm8994-*.dtsi files that contain MSM8994-specific information;board-specific information on the MSM8994;GPIO management ; audio-related customization is available in files such as msm8994.dtsi, msm8994-mtp.dtsi, and msm8994-cdp.dtsi

<APSS_BUILD>/LINUX/android//kernel/sound/soc/codecs/ – Contains the source code for the codec driver for WCD9330; codec driver-related source files are wcd9330.c, wcd9xxx-mbhc.c, wcd9xxx-resmgr.c, wcd9xxx-common.c, etc.

<APSS_BUILD>//LINUX/android/kernel/drivers/mfd/ – Contains the source code for the codec driver; wcd9xxx-core.c, wcd9xxx-slimslave.c, and wcd9xxx-irq.c are the codec driver-related files

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android audio arch 的相关文章

随机推荐

  • 配置根目录_传奇单机架设教程:传奇单机登陆器配置全套教程

    在什么情况下需要架设单机呢 当你想要开外网 选定版本时可以将版本架设单机进行测试 当你觉得别人的服已经不够玩了 也可以自己架设单机 开自己喜欢的版本 传奇单机架设教程分享 只要学会了单机架设 就可以用本地电脑架设不同版本的传奇啦 赶快学起来
  • python 删除两个文件中没有一一对应的名称

    删除两个文件中没有一一对应的名称 针对于 jpg文件和xml文件没有对齐 usr bin python3 coding UTF 8 import os import shutil file name 1 JPEGImages 图片文件存放地
  • C语言进阶之路:如何去求任意两个数字的加减乘除问题

    提示 可以参考博主之前的文章来写的代码去寻找思路 文章目录 思考一下 一 提示 二 根据任意两个整数的求和去书写关于任意两个整数的加减乘除代码 1简单编写 2 笔者建议 总结 思考一下 提示 建议读者先进行自我思考 通过对博客的对比 不断挖
  • 未为python配置解释器_Python环境安装,解释器配置

    下载安装完Pycharm后 创建一个py文件编写代码会提示No Python interpreter configured for the project 这是提示要配置解释器 可以去官网下载安装 从官网下载https www python
  • 2021-09-04

    使用ESP8266实现STM32连网 USART实现 巴法云物联网 1 使用硬件 程序思路 基于正点原子的测试程序 在巴法云物联网创建的主题 ESP8266初始化代码 比较简陋 主函数代码 如果想用串口助手调试 接线方法如下 1 使用硬件
  • DFS判断有向图是否存在环

    st数组记录每个点的状态 0表示没访问过 1表示访问过 2表示与该点相邻的点都被访问过 dfs深搜如果遇到被标记成1的点 就说明有环 include
  • JavaWeb开发 JSP技术详解

    目录 一 JSP简介 1 1 JSP介绍 1 2 常见的视图层技术 1 3 前后端分离开发方式 二 JSP运行原理 2 1JSP技术特点 2 2 JSP与Servlet区别 三 JSP标签的使用 3 1 原始标签 3 1 1 声明标签 3
  • Win10配置环境变量path详解

    一 配置环境变量的目的 在刚刚写的代码中 只能存放在bin目录下 才能使用 javac 和 java 工具 如果我想把代码存放在任意的目录下 在任意的目录下都可以使用javac 和 java 工具该怎么办呢 就可以把 javac 和 jav
  • JavaScript基本数据类型简单转换

    JavaScript几个变量类型简单介绍 number型 数字型 string型 字符型 Boolean型 布尔型 true 1 false 0 undefine 未定义类型 null 空值 其它类型本文暂不涉及 注意 1 JavaScri
  • L298N驱动俩路电机按键控制正反转

    一个L298N是带有俩路驱动电路的 就是可以驱动俩个电机同时去转动 在硬件部分因为以前弄小车的时候已经组装好了 一路驱动去控制俩个电机 俩路驱动就是控制四个电机 做的是四轮四驱的小车 嫌麻烦就没有去拆改装了 博主主页里面有介绍过L298N的
  • Jenkins

    参考 Job artifacts GitLab 作业产物 GitLab 说明 晚点补充
  • Java程序设计--Java入门(一)

    Java入门 1 Java概述 1 1 Java语言发展史 1 2 Java语言跨平台原理 1 3 JRE和JDK 1 4 JDK的下载和安装 2 入门程序HelloWorld 2 1 常用DOS命令 2 2 Path环境变量的配置 2 3
  • IDEA 配置 openjdk,jre

    使用 idea 配置 zip 版本的 openjdk 和 jre 我使用的时 redhat 提供的 jdk 和 jre 一 下载 idea jdk 和 jre 红帽openjdk下载地址为 Red Hat build of OpenJDK
  • 零度根轨迹的推导

    根轨迹有很多种 常见有180度根轨迹 0度根轨迹和参数根轨迹 0度和180度是对比记忆的 记住一个另一个也记住了 比较常见的是180度根轨迹 而画根轨迹的目的是通过图像来反应闭环传递函数的一些根的性质从而代表了这个系统的一些性能指标 从根轨
  • JavaWeb_LeadNews_Day11-KafkaStream实现实时计算文章分数

    JavaWeb LeadNews Day11 KafkaStream实现实时计算文章分数 KafkaStream 概述 案例 统计单词个数 SpringBoot集成 实时计算文章分值 来源 Gitee KafkaStream 概述 Kafk
  • 使用URL传递参数

    现在比较流行RESTful风格 而通过URL进行参数的传递这就符合RESTful风格 什么是RESTful风格呢 对应的中文是rest式的 Restful web service是一种常见的rest的应用 是遵守了rest风格的web服务
  • qt定时器的多种使用方式

    qt定时器的多种使用方式 1 基础版实现 2 便捷版实现 基于Lambda函数 3 一次性版实现 4 重写定时器事件版实现 QObject内部定时器 1 基础版实现 1 头文件类中定义Timer mTime 指针变量或直接定义QTimer
  • VMware虚拟机的三种网络连接模式的特点

    在VMware Workstation中创建虚拟机后 配置虚拟机的网络连接有3种模式 分别是 1 桥接模式 VMnet0 2 NAT模式 VMnet8 3 仅主机模式 VMnet1 这三种网络连接模式有什么用途及其区别是什么 以下简单介绍
  • 等保案例 6

    用户简介 江苏省监狱管理局是江苏省司法厅管理下的副厅级部门管理机构 是主管全省监狱工作的机关 随着信息化的发展 江苏省监狱管理局的监狱业务对网络和信息系统的依赖不断增加 网络流转的信息量不断增大 信息化建设的需求也日益凸现 因此江苏省监狱管
  • android audio arch

    android audio arch ALSA System on Chip ASoC ASoC 驱动将一个audio子系统分成四个部分 Machine driver Platform driver CPU driver以及Codec dr