干,认识Audio框架还因此发现一个雷

共 2144字,需浏览 5分钟

 ·

2020-11-11 19:27




我们最近出了一个问题,我们点击播放音乐,然后再点击停止播放的时候,喇叭还会输出一段杂音后喇叭才会停止输出


经过排查发现,在代码里面就做了这个功能

代码在AudioFlinger.h 里


frameworks/av/services/audioflinger/AudioFlinger.h



为啥有这个功能?

我咨询了一个大佬,是这样回复的


这个操作应该是做来解决一直开关导致的po音的 看看有没有数据帧的callback在停的时候有没有再被调用,你关了3S秒是有可能有popo音的


再声明下,这个 3s 的时间是Google默认设定的时间,如果是做音频的同学,可以关注一下这个特性,而且是自己的产品的话,需要根据自己的要求进行修改。



来一张audio框架图片


Audio代码位置


AudioTrack.javaframework/base/media/java/com/android/media/AudioTrack.java
android_media_track.cppframework/base/core/jni/android_media_track.cpp
MemoryHeapBaseframework/base/libs/binder/MemoryHeapBase.cpp
MemoryBase.hframework/base/include/binder/MemoryBase.h
AudioTrack.cppframework/base/libmedia/AudioTrack.cpp
audio_track_cblk_t声明framework/base/include/private/media/AudioTrackShared.h
audio_track_cblk_t定义framework/base/media/libmedia/AudioTrack.cpp
Main_MediaServer.cppframework/base/media/mediaserver/Main_MediaServer.cpp
AudioFlinger.cppframework/base/libs/audioFlinger/AudioFlinger.cpp
AudioHardwareInterface.h 不同厂商的HAL位置会不同hardware/libhardware_legacy/include/hardware_legacy/AudioHardwareInterface.h
AudioMixer.cppframework/base/libs/audioflinger/AudioMixer.cpp
AudioSystem.hframework/base/include/media/AudioSystem.h
AudioSystem.cppframework/base/media/libmedia/AudioSystem.cpp
AudioPolicyInterface.hhardware/libhardware_legacy/include/hardware_legacy
AudioPolicyManagerBase.cppframework/base/libs/audioflinger/AudioPolicyManagerBase.cpp
AudioService.javaframework/base/media/java/com/android/media/AudioService.java
Android_media_AudioSystem.cppframework/base/core/Jni/Android_media_AudioSystem.cpp


主要要关注audioflinger和audiopolicy这两个服务




再看看一些调用关系的图片



AudioTrack


AudioTrack属于Audio系统对外提供的API接口类,在java层和native层都有对应类。


AudioFlinger 


AudioFlinger是audio的核心,AudioTrack的数据需要经过AudioFlinger进行混音等处理,这里的数据最终会写入到Audio 的HAL层。


audioFlinger和audiopolicy实例化


AudioFlinger::instantiate();AudioPolicyService::instantiate();


AudioPolicy


AudioFlinger控制的是输入和输出,AudioPolicyService控制着整个音频系统,所以AudioPolicy创建完成后,音频系统也就开始工作了。


我们在很多地方看到有资料说的,AudioPolicy是音频系统的策略管理系统,也就是这个意思。




推荐阅读:
    专辑|Linux文章汇总
    专辑|程序人生
    专辑|C语言

嵌入式Linux
微信扫描二维码,关注我的公众号 
浏览 47
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报