Android Audio system

首先看一下传输格式:

•PCM

–BCLK、FS、DR、DX

•IISS(Inter-IC Sound bus)

–I2S,是菲利浦公司提出的串行数字音频总线协议。目前很多音频芯片和MCU都提供了对IIS的支持。IIS总线只处理声音数据。其他信号(如控制信号)必须单独传输。
–IIS只使用了三根串行总线。
–提供分时复用功能的数据线 -IISDI  IISDO
–字段选择线(声道选择) -IISLRCK
–时钟信号线 –IISCLK
–因为可以传送多个声道的数据,所以显然更加适合Stereo Single,其实所谓的立体声,也就是多个声道可以发出不一样的声音)。

•AC97

–AC'97(Audio Codec 1997)是以Intel为首的五个PC厂商Intel、Creative Labs、NS、Analog Device与Yamaha共同提出的规格标准 。
 

再看一下Android系统的启动流程。在INIT1阶段会启动AudioFlinger服务。(还是上传不了图片)

Audio Flinger / Audio Policy Service两个重要的服务:

在Framework\base\media\MediaServer\Main_MediaServer.cpp中,
启动serviceManager之后,创建AF和APS
•AF:
创建一个HAL对象,HAL可以是ALSA/OSS标准
•APS:
–创建AudioCommandThread内部线程,完成音量控制,输入、输出切换
–APS同时创建AudioManagerBase,作为系统默认的音频管理
–在AMB中管理策略上的事情,同时会在AF的openOutput中创建混音线程

代码结构

Stagefright调用Awesomeplayer是实现音视频等功能。可以说是对awesomeplay的封装和进一步抽象。
•JAVA类路径:
–Frameworks/base/media/java/android/media/MediaPlayer.java
•JAVA本地调用(JNI)
–Frameworks/base/media/jni/android_media_MediaPlayer.cpp
•Libmedia_jni.so
•主要头文件
–Frameworks/base/include/media/
•多媒体底层库
–Frameworks/base/media/libmedia/
•Libmedia.so
•多媒体服务部分
–Frameworks/base/media/libmediaplayerservice/
•Libmediaplayerservice.so
•Libstagefright
–Frameworks/base/media/libstagefright/

code flow

bitstream(output)
•AudioPolicyService->openOutput -> AudioSystem -> AudioFlinger -> AudioFlinger::openOutput -> mAudioHardware->openOutputStream() -> AudioHardware::openOutputStream() ->AudioStreamOutMSM72xx* out->set(this,devices,format,channels,sampleRate) -> Write -> AudioStreamOutMSM72xx::write() -> /dev/msm_pcm_out
最后通过RPC/SMEM异步通知DSP处理,到DSP后一般都是闭源的了。
control data
ALSA API is provided specifically for Android releases to support device and stream management. This proprietary implementation is provided by Vendor.
一般soc厂商会提供基于ALSA的API出来。但是里面通常是闭源的。比如要支持5.1声道的话,需要看看Vendor支不支持了(尽管硬件可能支持)

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值