一、 android本身对播放流程就有一个很完善的控制,能够很好的理解AudioTrack服务的运作,对于理解和解决下行数据的处理有个很好的指导作用。
AudioRecord和AudioTrack是音频上行和下行的两大重要服务,本文主要针对下行AudioTrack服务进行流程的详细说明。AudioTrack服务启动之后会把数据传给AudioFlinger,之后会传给hal,最后会传给DSP到声卡然后播放出来。
二、具体代码流程如下:
AudioTrack::set
↓
AudioSystem::getOutput
↓
aps->getOutput
↓
mpAudioPolic->get_output()
↓
qap -> policy.get_output=ap_get_output
↓
Qap->apm->getOutput()
↓
Class AudioPolicyInterface
{audio_io_handle_t getOutput()}
↓
Class AudioPolicyManagerBase:public AudioPolicyInterface
↓
Class AudioPolicyManagerALSA:public AudioPolicyManagerBase
↓
AudioPolicyManager::getOutput
↓
Class AudioPolicyClinetInterface
{openOutput()}
↓
Class AudioPolicyCompatClien:public AudioPolicyClinetInterface
↓
AudioPolicyCompatClien::openOutput()
↓
mServiceOps->open_output_on_module()
↓
Open_output : aps_open_output
(AudioPolicyService.cpp)
↓
Af->openOutput()
↓
AduioFlinger::openOutput
↓
hwDevHal->open_output_stream
↓
Qadev->device.open_output_stream
=adev_open_output_stream
↓
qadev->hwif->openOutputStream
↓
AudioHardwareALSA::openOutputStream