音量调节
1.由谁控制----AudioPolicy
1.1调节音量的场景
主动因素
主动调节音量setStreamVolumeIndex
设置静音setStreamMute
被动因素(输出设备的改变)
startOutput
stopOutput
setPhoneState
setDeviceConnectionState
setForceUse
2.按键后发生了什么–
checkAndSetVolume又两个比较重要的函数,setvolume经过一系列会调用到
audioHwDevice->hwDevice()->setAudioPortConfig(config),最终调用到hal层,写入内核。setCurVolume经过一系列会调用到AudioTrack::setVolume,然后调到setVolumeLR,mCblk可能是与audioflinger通信的环形buffer AudioFlinger::PlaybackThread::threadLoop会不断调用AudioFlinger::MixerThread::prepareTracks_l(frameworks/av/services/audioflinger/Threads.cpp),而prepareTracks_l中会调用getVolumeLR
volume=mastervolumestreamvolumetrackvolume,用音频数据乘以volume然后threadloop_write写给hal层