AudioTrack是和PlaybackThread中创建的Track一一对应的,Track是Bn,AudioTrack是Bp。音乐APP通过操作AudioTrack来进行音乐数据的传输。具体过程如下:
应用initAudioTrack ,new一个AudioTrack, 注意里面的flag(比如AUDIO_OUTPUT_FLAG_FAST,那说明这个output是需要FastMixer的)。并且调用了AudioTrack的set函数,注册了audioCallback做callback函数。这个callback是AT和应用交互数据的接口。
在set函数里,调用了AudioSystem::getOutput,然后是hardware/libhardware_legacy/audio/AudioPolicyManagerBase.cpp调用了getOutput,这里会找一个完全满足输入参数如bit-depth的output,否则返回0。然后调用client的openOutput。client这里是AudioFLinger,所以findSuitableHwDev_l,open_output_stream,然后new Mixer。所以,一个Output对应一个playback线程。手机里面的output是由audio_policy.conf定义的。由各个厂家自己实现。
在set函数里,创建了AudioTrackThread线程,这个线程不停的执行threadLoop,除非有人pause或stop它。threadLoop中有一个重要的函