Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92
bool AudioFlinger::PlaybackThread::threadLoop()
{
......
while (!exitPending())
{
......
//如果目前没有音频需要处理,那么进入睡眠。
if ((!mActiveTracks.size() && systemTime() > mStandbyTimeNs) ||
isSuspended()) {
// put audio hardware into standby after short delay
if (shouldStandby_l()) {
//进入睡眠待机
threadLoop_standby();
mStandby = true;
}
if (!mActiveTracks.size() && mConfigEvents.isEmpty()) {
.....
//等待被唤醒
mWaitWorkCV.wait(mLock);
......
}
}
// mMixerStatusIgnoringFastTracks is also updated internally
//唤醒后说明有active的trace,混音前做准备工作
mMixerStatus = prepareTracks_l(&tracksToRemove);
......
if (mBytesRemaining == 0) {
//开始混音
threadLoop_mix();
......
}
if (!waitingAsyncCallback()) {
......
if (mBytesRemaining) {
//混音后就可以写数据到底层了
ret = threadLoop_write();