summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Laurent <elaurent@google.com>2013-12-20 17:36:01 -0800
committerEric Laurent <elaurent@google.com>2014-03-05 14:03:30 -0800
commit281dd4e13309973dbb85bce531f884237e0d8fb0 (patch)
treef58a048f67a81b56c07593f727c92a445b249f4b
parentabab1c33caf0982c11713e6d64d60105dcbc8ab7 (diff)
downloadframeworks_av-281dd4e13309973dbb85bce531f884237e0d8fb0.zip
frameworks_av-281dd4e13309973dbb85bce531f884237e0d8fb0.tar.gz
frameworks_av-281dd4e13309973dbb85bce531f884237e0d8fb0.tar.bz2
audioflinger: fix static track end detection
If a static track is not a fast track, prepareTracks_l() must rely on framesReady() to detect end of buffer and remove the track from the active track list. Failing to do so results in the track staying active but not processed by the mixer because in underrun. This leaves the mix buffer content uninitialized and causes the effect process function to accumulate its output onto undefined data. Bug: 12013676. Change-Id: I4b0819a9d93141ac3307b8786fc6a451dd585220
-rw-r--r--services/audioflinger/Threads.cpp11
1 files changed, 2 insertions, 9 deletions
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp
index 7cc6abe..4f1c01d 100644
--- a/services/audioflinger/Threads.cpp
+++ b/services/audioflinger/Threads.cpp
@@ -3038,15 +3038,8 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac
(mMixerStatusIgnoringFastTracks == MIXER_TRACKS_READY)) {
minFrames = desiredFrames;
}
- // It's not safe to call framesReady() for a static buffer track, so assume it's ready
- size_t framesReady;
- if (track->sharedBuffer() == 0) {
- framesReady = track->framesReady();
- } else if (track->isStopped()) {
- framesReady = 0;
- } else {
- framesReady = 1;
- }
+
+ size_t framesReady = track->framesReady();
if ((framesReady >= minFrames) && track->isReady() &&
!track->isPaused() && !track->isTerminated())
{