summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Laurent <elaurent@google.com>2010-10-05 14:41:42 -0700
committerEric Laurent <elaurent@google.com>2010-10-05 14:41:42 -0700
commitaf59ce2407fa4e6e5d8f1664a4df2daf1badd407 (patch)
tree6a7eacbbcc46026be5fa06535c80e3de357c4e79
parent50817931e4cb4ae0019fd13c831a2839349834c5 (diff)
downloadframeworks_av-af59ce2407fa4e6e5d8f1664a4df2daf1badd407.zip
frameworks_av-af59ce2407fa4e6e5d8f1664a4df2daf1badd407.tar.gz
frameworks_av-af59ce2407fa4e6e5d8f1664a4df2daf1badd407.tar.bz2
Fixed AudioFlinger not always pausing tracks
If the pause request is received before the AudioTrack buffer was completelly filled and the track ready for mixing, the pause is not executed: the track just underruns and stays in pausing state. The fix consists in considering the track ready for mixing immediately if pausing. Change-Id: Ia6cb4703fee2126e41011a6400ea8eeb3a3e5456
-rw-r--r--services/audioflinger/AudioFlinger.cpp6
1 files changed, 3 insertions, 3 deletions
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index 8527059..cd9b07e 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -1715,7 +1715,7 @@ 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() || track->isStopped()) &&
+ if (cblk->framesReady() && track->isReady() &&
!track->isPaused() && !track->isTerminated())
{
//LOGV("track %d u=%08x, s=%08x [OK] on thread %p", track->name(), cblk->user, cblk->server, this);
@@ -2231,7 +2231,7 @@ bool AudioFlinger::DirectOutputThread::threadLoop()
// The first time a track is added we wait
// for all its buffers to be filled before processing it
- if (cblk->framesReady() && (track->isReady() || track->isStopped()) &&
+ if (cblk->framesReady() && track->isReady() &&
!track->isPaused() && !track->isTerminated())
{
//LOGV("track %d u=%08x, s=%08x [OK]", track->name(), cblk->user, cblk->server);
@@ -3039,7 +3039,7 @@ getNextBuffer_exit:
}
bool AudioFlinger::PlaybackThread::Track::isReady() const {
- if (mFillingUpStatus != FS_FILLING) return true;
+ if (mFillingUpStatus != FS_FILLING || isStopped() || isPausing()) return true;
if (mCblk->framesReady() >= mCblk->frameCount ||
(mCblk->flags & CBLK_FORCEREADY_MSK)) {