1. AudioFlinger和AudioPolicyService的啟動是在Main_audioserver中。其啟動流程如下面所示:

2. Audiotrack輸出音頻到outputdevice的過程
3. A2DP接入時audio部分的處理流程
4. android audio音量變化主要是在AudioMix混音階段,AudioFlinger::MixerThread::prepareTracks_l裡音量計算如下:
AudioMix設定混音參數:
android audio volume
設定混音器的參數後,mstervolume和typevolume的改變都會導緻混音後資料音量的變化。那麼,所有藍牙相關的音量問題都可以通過追蹤mastervolume和streamtypeVolume的變化找到問題的根源。
(1)streamtypeVolume引起的音量問題
一般藍牙音頻裝置接入後,根據audiopolicy會對各種device以及streamtype音量做出調整,音量調整是通過setStreamVolume設定的,僅僅是設定MixerThread的volume以達到改變音量的目的。其流程圖如下:
(2). masterVolume引起的藍牙A2DP音量問題
masterVolume的設定是在audioflinger在loadHWmodule的時候,根據primary device即TV speaker的HAL中的get_master_volume獲得初始值;其他輸出device比如A2DP的mixerthread在建立的時候,會判斷device HAL是否支援設定mastervolume(canSetMasterVolume),如果可以會初始化masterVolume=1.0.
masterVolume改變的流程圖如下: