1、进程的创建
int AudioFlinger::openOutput(uint32_t *pDevices,
uint32_t *pSamplingRate,
uint32_t *pFormat,
uint32_t *pChannels,
uint32_t *pLatencyMs,
uint32_t flags)
{
if (output != 0) {
thread = new MixerThread(this, output, ++mNextThreadId);
}
}
2、进程的启动
void AudioFlinger::PlaybackThread::onFirstRef()
{
const size_t SIZE = 256;
char buffer[SIZE];
snprintf(buffer, SIZE, "Playback Thread %p", this);
run(buffer, ANDROID_PRIORITY_URGENT_AUDIO);
}
3、进程的运行
bool AudioFlinger::MixerThread::threadLoop()
{
Vector< sp<Track> > tracksToRemove;
uint32_t mixerStatus = MIXER_IDLE;
nsecs_t standbyTime = systemTime();
size_t mixBufferSize = mFrameCount * mFrameSize;
// FIXME: Relaxed timing because of a certain device that can't meet latency
// Should be reduced to 2x after the vendor fixes the driver issue
nsecs_t maxPeriod = seconds(mFrameCount) / mSampleRate * 3;
nsecs_t lastWarning = 0;
bool longStandbyExit = false;
uint32_t activeSleepTime = activeSleepTimeUs();//当有活跃音轨时需要sleep的时间
uint32_t idleSleepTime = idleSleepTimeUs();//当mixer处于idle状态,没有活跃音轨时需要sleep的时间
uint32_t sleepTime = idleSleepTime;//真正需要sleep时候的时间,初始化为idle状态的时间
Vector< sp<EffectChain> > effectChains;
while (!exitPen