diff options
author | Eric Laurent <elaurent@google.com> | 2011-11-08 08:32:57 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-11-08 08:32:57 -0800 |
commit | f3a892ab9347ce733b81ccb4913a91c586f8f367 (patch) | |
tree | ea96a636ee8f6616b9121671476480f52d1e8986 /services | |
parent | 9d6a51623fdabbe993d7b8848794607394ef7cc2 (diff) | |
parent | 19ddf0ebb013c0ad1d6c04f0c9d6ce177a0fafae (diff) | |
download | frameworks_base-f3a892ab9347ce733b81ccb4913a91c586f8f367.zip frameworks_base-f3a892ab9347ce733b81ccb4913a91c586f8f367.tar.gz frameworks_base-f3a892ab9347ce733b81ccb4913a91c586f8f367.tar.bz2 |
Merge "AudioFlinger: mix track only when really ready" into ics-mr1
Diffstat (limited to 'services')
-rw-r--r-- | services/audioflinger/AudioFlinger.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp index 69560e5..96e8eb9 100644 --- a/services/audioflinger/AudioFlinger.cpp +++ b/services/audioflinger/AudioFlinger.cpp @@ -2066,7 +2066,16 @@ uint32_t AudioFlinger::MixerThread::prepareTracks_l(const SortedVector< wp<Track // The first time a track is added we wait // for all its buffers to be filled before processing it mAudioMixer->setActiveTrack(track->name()); - if (cblk->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 ((cblk->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); |