Android 12 AudioFlinger 分析(RK3588)

news/2024/11/27 23:56:39/

一、分析背景

        上一次详细分析跟读AudioFlinger代码还是Android5的时候,最近有空基于RK3588的Android12 sdk跟读了一下代码。工作中大部分也是不需要修改Google部分的代码,大多是是修改hal层代码。从Android O开始很多模块都HIDL化了。之前的版本都是AudioFlinger直接使用 如:audio.primary.XXX.so。mtk平台是 audio.primary.mt6771.so,RK是audio.primary.rk30.so。 其它方面倒是改动不大。所以本文主要分析audio HIDL相关的调用流程。

二、HIDL简介

        Google解决碎片化的。类似AIDL,基于binder通信机制。C/S架构,这里只需要知道分为客户端,服务端即可。具体的IPC通信原理和旧版本的binder一样。

三、HIDL后进程上的变化

        /system/bin/audioserver 属于hidl的client端,AudioFlinger依附在这个进程,该进程不直接操作声卡节点。/vendor/bin/hw/android.hardware.audio.service属于hild的server端这个进程使用 audio.primary.XXX.so,调用pcm_open,pcm_read,pcm_wrtite等操作声卡。android.hardware.audio.service不同平台不一样,比如mtk的就是android.hardware.audio@4.0-service-mediatek。

四、代码分析

   查看图片吧。可以下载svg图片直接浏览器打开可以搜索关键字定位。图片查看顺序:自上而下,从左往右。svg下载地址:Android12AudioFlinger分析(RK3588)-Linux文档类资源-CSDN下载

AudioFlinger 初始化分析:

IDevicesFactory注册流程分析:


http://www.ppmy.cn/news/494768.html

相关文章

html5 audio标签播放后端base64编码的文件流

html中audio填充格式参考: 地址1 后端参考代码 file open(wav_path, rb) # 用open函数以二进制方式读取文件 info file.read() # 直接读全部的信息就行 # 这里base64.encode返回了bytes数据,但bytes数据没法在json中传输,所以我用str()将其转为str…

Android Audio混音实践篇

Android Audio混音实践篇 简介 本篇文章主要介绍Android Audio模块的MixerThread混音业务如何实现的?建议在阅读这篇文章之间先阅读混音理论基础篇,并且在分析源码之前:头脑里构想一个大致的混音过程,多路音频AudioTrack叠加在一…

AudioRecord工作流程(蓝牙a2dp的状态下)

由于要实现a2dp的sink功能。所以大致看了下af和aps的结构。以下是学习摘要。 在看文章前,我们先来看下AudioFlinger和AudioPolicyService这两个东西,AudioFlinger是具体干活的,包括后者调用的具体处理;AudioPolicyService则主要进…

Android 音频系统:从 AudioTrack 到 AudioFlinger

1. Android 音频框架概述 Audio 是整个 Android 平台非常重要的一个组成部分,负责音频数据的采集和输出、音频流的控制、音频设备的管理、音量调节等,主要包括如下部分: Audio Application Framework:音频应用框架 AudioTrack&a…

html audio自动停止了,HTML5音频停止功能(HTML5 Audio stop function)

我玩的每一个环节中点击一个小的音频剪辑在我的导航 HTML代码: JS代码: $(#links a).click(function(e) {e.preventDefault(); var beepOne = $("#beep-one")[0]; beepOne.play(); }); 它的正常工作为止。 问题是,当一个声音片段已在运行,我点击任何链接没有任何…

audio框架学习-Audio_Track分析

文章目录 一、整体结构框图二、AudioTrack的解析2.1 AudioTrack API 两种数据传输模式2.2 AudioTrack API 音频流类型2.3 getMinBufferSize 函数分析2.4 AudioTrack 对象创建2.5 AudioTrack 在JNI 中的使用2.6 AudioTrack 的play和write2.7 new AudioTrack 和 set 的调用 三、整…

Android N的Audio系统(五)

AudioFlinger 回放录制线程 AndioFlinger 作为 Android 的音频系统引擎,重任之一是负责输入输出流设备的管理及音频流数据的处理传输,这是由回放线程(PlaybackThread 及其派生的子类)和录制线程(RecordThread&#xf…

audio标签 FileReader blob转base64 base64转blob 语音

base64转blob内容 function sentComment() {var url $("#albumItemCommentURL").val();var params {"mediaType": 3};var audioBase64Data $("#audioBase64Data").attr("src");//获取图片的base64//创建formData对象var formData …