一、 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