diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp index 778e40915fe93..452205f3d8c8d 100644 --- a/services/audioflinger/AudioFlinger.cpp +++ b/services/audioflinger/AudioFlinger.cpp @@ -2160,7 +2160,16 @@ uint32_t AudioFlinger::MixerThread::prepareTracks_l(const SortedVector< wpsetActiveTrack(track->name()); - if (track->framesReady() && track->isReady() && + // make sure that we have enough frames to mix one full buffer + uint32_t minFrames = 1; + if (!track->isStopped() && !track->isPausing()) { + if (t->sampleRate() == (int)mSampleRate) { + minFrames = mFrameCount; + } else { + minFrames = (mFrameCount * t->sampleRate()) / mSampleRate + 1; + } + } + if ((track->framesReady() >= minFrames) && track->isReady() && !track->isPaused() && !track->isTerminated()) { //LOGV("track %d u=%08x, s=%08x [OK] on thread %p", track->name(), cblk->user, cblk->server, this);