summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorEric Laurent <elaurent@google.com>2011-11-08 16:37:11 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2011-11-08 16:37:11 +0000
commit3b86c964df855a9740c446e984309b719c3ec37c (patch)
tree3b024b1e3775c17355fc5fcac1b9ca8e6af3563c /services
parent6a9ab553ebd36705d3edacc6deb6a27dd6b799a3 (diff)
parente1a8a719c7c62fdb337b71f68844ae20042c2b79 (diff)
downloadframeworks_av-3b86c964df855a9740c446e984309b719c3ec37c.zip
frameworks_av-3b86c964df855a9740c446e984309b719c3ec37c.tar.gz
frameworks_av-3b86c964df855a9740c446e984309b719c3ec37c.tar.bz2
am f3a892ab: Merge "AudioFlinger: mix track only when really ready" into ics-mr1
* commit 'f3a892ab9347ce733b81ccb4913a91c586f8f367': AudioFlinger: mix track only when really ready
Diffstat (limited to 'services')
-rw-r--r--services/audioflinger/AudioFlinger.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index e2e3863..433af4a 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())
{
//ALOGV("track %d u=%08x, s=%08x [OK] on thread %p", track->name(), cblk->user, cblk->server, this);